Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

주어진 문자열이 C++에서 회문 회전인지 확인

<시간/>

여기서 우리는 하나의 문자열이 특정 회전 후 회문임을 알 수 있습니다. 회문은 양방향으로 동일한 문자열입니다. 문자열 회전은 AAAAD와 같은 경우 회문입니다. 이것은 직접 회문은 아니지만 회전 AADAA는 회문입니다.

문자열이 회문(palindrome)이 회전되었는지 확인하려면 처음에 이것이 회문인지 여부를 확인한 다음 한 문자만큼 회전한 다음 다시 확인합니다. 이 확인은 n 시간 동안 수행됩니다. 여기서 n 문자 수입니다.

예시

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
bool isPalindromeRange(string str, int left, int right){
   return (left >= right) || (str[left] == str[right] && isPalindromeRange(str, left + 1, right - 1));
}
bool isRotatedPalindrome(string str){
   int len = str.length();
   for (int i = 0; i < len; i++){
      rotate(str.begin(), str.begin() + 1, str.end());
      if (isPalindromeRange(str, 0, len - 1)) //if rotated string is palindrome, then return true
         return true;
   }
   return false;
}
int main(){
   string str = "AAAAD"; //AADAA is palindrome
   //rotate(str.begin(), str.begin() + 2, str.end());
   if (isRotatedPalindrome(str))
      cout << "Its rotation is palindrome";
   else
      cout << "Its rotation is not palindrome";
}

출력

Its rotation is palindrome