Минимальное количество ходов для получения лексикографического наименьшего значения путем вращения строки

Я делаю задачу, чтобы получить минимальное количество ходов, необходимое для получения наименьшего лексикографического значения данной строки. Сначала я добавил строку и повернул ее, чтобы сохранить на карте с ключом в качестве движения. Затем я вернул первый ключ карты, который дает мне maxMoves, чтобы получить эту минимальную лексикографическую строку. Например: anadama => nadamaa => adamaan => damaana => amaanad => maanada => aanadam. Здесь output = 6, поскольку для получения строки с наименьшим лексикографическим значением требуется шесть поворотов.

Когда я пробегаю представление, он говорит, что Abort Called или Runtime Error- Message Masked.

Вот мой код:

int minRotate(string inscription) {

    map<string, int> concatedString;
    int inscriptionLength = inscription.length();
    inscription += inscription;

    int minRotation = 0, roatateNum = 1, temp = 1;   

    //Checking if the given is lexiographically small in number
    if (inscription.empty() || inscription.find_first_not_of(inscription[0]) == string::npos)
        return minRotation;

    for (int i = 1; i <= inscriptionLength; i++) {

        //rotate(inscription.begin(), inscription.begin()+1, inscription.end());
        string tempString = inscription.substr(temp, inscriptionLength);
        concatedString[tempString] = i;
        temp++;
    }

    map<string, int>::iterator it = concatedString.begin();
    minRotation = it->second;

    return minRotation;
}   

0 ответов

Другие вопросы по тегам