检查给定字符串是否为 C++ 中的回文旋转
在这里,我们将看到一个字符串在某个旋转后是否是回文。回文是一种在两个方向都相同的字符串。字符串旋转是一个回文,如果它像 AAAAD。这不是一个直接的回文,但它的旋转 AADAA 是一个回文。
要检查一个字符串是否是旋转回文,那么我们将先检查它是不是回文,之后,将其按一个字符旋转,然后再次检查,此检查将执行 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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP