1. 暴力法
先求出每个子串,然后再判断这个子串是不是回文串
求出每个子串的复杂度数O(N2),判断一个子串是不是回文串的复杂度是O(N),所以这个算法的复杂度就是O(N3)
#include <bits/stdc++.h>
using namespace std;
const int MAX = 100001;
char str[MAX];
int len;
int fun(){
int ans = 0, i, j, k;
for (i = 0; i < len; i++){
for (j = i; j < len; j++){
for (k = 0; k*2 < j-i+1; k++){
if (str[i+k] != str[j-k]){
break;
}
}
if (k*2 >= j-i+1){
ans = max(ans, j-i+1);
}
}
}
return ans;
}
int main()
{
scanf("%s", str);
len = strlen(str);
printf("%d", fun());
return 0;
}
2. 动态规划
令p[i][j]表示以i开始,以j结束的回文串的长度,如果不是回文串,p[i][j]就是0
如果p[i][j] 是一个回文串,p[i+1][j-1]也是一个回文串
首先p[i][i]是长度为1的回文串,然后状