题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/
题意:给你一个字符串
s
,找到s
中最长的回文子串。
方法:动态规划 ,时间复杂度O(n^2),空间复杂度O(n^2)
class Solution {
public:
string longestPalindrome(string s) {
int maxL = 1;//保存回文串的最大长度
int pos = 0;//最长回文串的起始位置
int size = s.size();//统计字符串长度
vector<vector<bool>> dp(size,vector<bool>(size,0));//动态规划数组,dp[i][j]表示i到j是否是一个回文串
for(int j=0;j<size;j++)//枚举
{
for(int i=0;i<=j;i++)
{
if(s[i]==s[j]&&(j-i<2||dp[i+1][j-1]))//如果两端字符相同,并且串的长度在2以内或者串本身是个回文串
{
dp[i][j] = true;//表示从i到j是个回文串
if(j-i+1>maxL)//寻找最大长度的串,找到就更新
{
maxL = j-i+1;
pos = i;
}
}
}
}
return s.substr(pos,maxL);//返回回文串的最大长度
}
};