查找一个字符串里的最大回文字符串
1. 使用动态规划方法,把该字符串逆序,相当于查找正序和逆序两个字符串中的最大公共子字符串的长度
使用便利方法,复杂度也是O(N2)
还有一种曼切斯特算法,O(N)复杂度,看不太懂
void FindMaxMid(const string& S)
{
string _S;
_S.resize(S.size());
for(int i=S.length()-1, j=0; i >=0; i--,j++)
{
_S[j] = S[i];
}
printf("_S is %s\n", _S.c_str());
const int iL = S.length();
int dp[iL][iL] ;
for(int i=0; i<iL; ++i)
{
for(int j=0; j<iL; j++)
{
dp[i][j] = 0;
}
}
if(S[0] == _S[0]) dp[0][0] = 1;
for(int i=1; i <iL; ++i)
{
for(int j=1; j < iL; ++j)
{
printf("max is %d \n", dp[i][j]);
if(S[i] == _S[j])
{
dp[i][j] = dp[i-1][j-1] + 1;
}
else
{
dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
printf("max is %d \n", dp[i][j]);
}
}
}
}
int main()
{
string teststr = "babad";
FindMaxMid(teststr);
return 0;
}