5. Longest Palindromic Substring 动态规划,longestpalindromic
5. Longest Palindromic Substring 动态规划,longestpalindromic
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
问题分析:
求最长回文子字符串。参考
注意f[i][j]表示i到j是否为回文。i<=j。通过动态规划,求出前面所有的情况。
从[0][0]开始,
当1时,判断[0][1]等效判断[1][0](true),[1][1]也是已知。
当2时,判断[0][2]等效[1][1],或者false.[1][2],[2][2]
当3时,判断[0][3]等效[1][2]
代码:
class Solution {
public:
string longestPalindrome(string s) {
if(s.size()==1) return s;
int len=s.size();
bool f[len][len];
for(int i=0;i<len;++i)
for(int j=0;j<len;++j)
{
if(i>=j) f[i][j]=true;
else f[i][j]=false;
}
int mlen=0;
int start=0;
for(int i=1;i<len;++i)
for(int j=0;j<i;++j)
{
if(s[i]==s[j])
{
f[j][i]=f[j+1][i-1];
if(f[j][i]==true && (i-j+1)>mlen)
{
mlen=(i-j+1);
start=j;
}
}
else
f[j][i]=false;
}
return s.substr(start,mlen);
}
};
相关文章
- 暂无相关文章
用户点评