Я делаю задачу, чтобы получить минимальное количество ходов, необходимое для получения наименьшего лексикографического значения данной строки. Сначала я добавил строку и повернул ее, чтобы сохранить на карте с ключом в качестве движения. Затем я вернул первый ключ карты, который дает мне maxMoves, чтобы получить эту минимальную лексикографическую строку. Например: анадама => надамаа => адамаан => дамана => аманаад => маанада => анадам. Здесь 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;
}
Задача ещё не решена.
Других решений пока нет …