1>动态规划加双指针。
const int N = 10000;
int dp[N][N];
class Solution {
public:
string longestPalindrome(string s)
{
int len=s.size();
if(len<=1)return s;//单个子串肯定是回文子串
//vector<vector<int>>dp (len,vector<int>(len,0));
for(int i=0;i<len;i++)
dp[i][i]=1;//将对角线初始化为1,表示一定回文。
int start =0;
int maxlength=1;
for(int i=1;i<len;i++)
{
for(int j=0;j<i;j++)
{
if(s[i]==s[j])
{
if(i-j<3) dp[j][i]=1;
else dp[j][i]=dp[j+1][i-1];
}
if(dp[j][i])
{
if(i-j+1>maxlength)
{
maxlength=i-j+1;
start=j;
}
}
}
}
return s.substr(start,maxlength);
}
};
这有一个要说明的是如果在函数内部写vector<vector<int>>dp(len,vector<int>(len,0));完全可以通过,
但是如果写为int dp[len][len];//这样就不能通过,因为即便len是等于s.size()的,但是int dp[len][len]是C语言中定义二维数组的方式,所以他就认为len是一个变量名,所以不能取
而如果在外部使用const int N=1000,然后就可以,因为在c++中使用const修饰的变量是常量。
当然还有别的做法,可以看leetcode