难度中等
给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
1 2 3
| 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
|
示例 2:
这题目可以使用动态规划
我觉得很棒的一个题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public: string longestPalindrome(string s) {
int len=s.length(); if(len<=1) return s; vector<vector<int>> dp(len,vector<int>(len)); for(int i=0;i<len;i++){ dp[i][i]=1; } int start=0; int maxl=1; for(int i=0;i<len;i++){ for(int j=0;j<i;j++){ if(s[i]==s[j]){ if(i-j<=2){ dp[j][i]=1; }else{ dp[j][i]=dp[j+1][i-1]; } } if(dp[j][i]==1){ int temp=i-j+1; if(temp>maxl){ maxl=temp; start=j; } } } }
return s.substr(start,maxl); } };
|