方法一:
//最长回文子串 #include <iostream> using namespace std; //*s为字符串,n为字符串的长度 int LagPalindrome(char *str, int n) { int count = 0; int max = 0;//最长回文子串的长度 if (str == NULL || n<1) { return 0; } for (int i = 0; i < n; i++) { //子串为奇数时 for (int j = 0; (i-j)>=0&&(i+j)<n; j++) { if (str[i - j] != str[i + j]) { break; } count = 2 * j + 1; } if (count > max) { max = count; } //子串为偶数时 for (int k = 0; (i - k)>=0 && (i + k + 1) < n; k++) { if (str[i - k] != str[i + k+1]) { break; } count=2*k + 2; } if (count > max) { max =count ; } } return max; } int main( ) { char str[] = "abccba"; int n = strlen(str); int MaxLen; MaxLen = LagPalindrome(str, n); cout << "最长回文子串的长度是:"<<MaxLen<<endl; return 0; }
方法二:
#include<iostream> using namespace std; //字符串是否对称 bool isAym(char *cbegin, char *cend) { if(cbegin == NULL || cend ==NULL || cbegin > cend) { return false; } while(cbegin<cend) { if(*cbegin!=*cend) { return false; } cbegin++; cend--; } return true; } int getMaxSym2(char * str) { if(str == NULL) return 0; int maxlength = 0; char *ptag = str; while(*ptag !='\0') { //奇数子字符串 char *left = ptag - 1; char *right = ptag + 1; int oddlenght = 1; while(left >= str && *right != '\0' && *left == *right) { left--; right++; oddlenght += 2; } if(oddlenght > maxlength) { maxlength = oddlenght; } //偶数子字符串 left = ptag; right = ptag + 1; int evenlength = 0; while(left >= str && *right != '\0' && *left == *right) { left--; right++; evenlength += 2; } if(evenlength > maxlength) { maxlength = evenlength; } ptag++; } return maxlength; }