class Solution {
public:
string longestPalindrome(string s) {
//使用字符串
//动态规划算法
int len=s.size();
int start=0;
int longest=1;
vector<vector<int>> dp(len,vector<int>(len,0));
if (s.empty()) return "";
//int len = s.size();
if (len == 1)return s;
//把这里的临近字符相同的初始化
for(int i=0;i<len;++i)
{
dp[i][i]=1;
if(i<len-1)
{
if(s[i]==s[i+1])
{
dp[i][i+1]=1;
start=i;
longest=2;
}
}
}
//使用动态规划的算法
int j;
for(int l=3;l<=len;++l)
for(int i=0;i+l-1<len;++i)//很好地限制了i的范围,这样后面不用判断
{
j=i+l-1;
if(s[i]==s[j]&&dp[i+1][j-1]==1)
{
dp[i][j]=1;
start=i;
longest=l;
}
}
return s.substr(start,longest);
}
};
LeetCode-5 最长回文子串
最新推荐文章于 2024-08-29 19:37:03 发布