lc5-最长回文子串
题目
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = “babad”
输出:”bab”
解释:”aba” 同样是符合题意的答案。
示例 2:
输入:s = “cbbd”
输出:”bb”
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
Code
MyCode
| 12
 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
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 
 | class Solution {
 public:
 string longestPalindrome(string s) {
 
 
 int len=s.size();
 string s1=s;
 reverse(s1.begin(),s1.end());
 if(s1==s)return s;
 
 int dp[1010][1010]={0};
 int cur_len=1;
 string rs="";
 rs+=s[0];
 
 for(int i=0;i<len;i++)
 {
 dp[i][i]=1;
 if(i!=len-1&&s[i]==s[i+1])
 {
 dp[i][i+1]=1;
 cur_len=2;
 rs=s.substr(i,2);
 }
 }
 
 for(int i=3;i<=len;i++)
 {
 for(int j=0;j<=len-i;j++)
 {
 if(dp[j+1][j+i-2]==1&&s[j]==s[j+i-1])
 {
 dp[j][j+i-1]=1;
 if(cur_len<i)
 {
 cur_len=i;
 rs=s.substr(j,i);
 }
 }
 }
 }
 return rs;
 }
 };
 
 | 
Standard_Code
| 12
 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
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 
 | #include <iostream>
 #include <string>
 #include <vector>
 using namespace std;
 class Solution {
 public:
 string longestPalindrome(string s) {
 int n = s.size();
 if (n < 2) {
 return s;
 }
 int maxLen = 1;
 int begin = 0;
 
 vector<vector<int>> dp(n, vector<int>(n));
 
 for (int i = 0; i < n; i++) {
 dp[i][i] = true;
 }
 
 
 for (int L = 2; L <= n; L++) {
 
 for (int i = 0; i < n; i++) {
 
 int j = L + i - 1;
 
 if (j >= n) {
 break;
 }
 if (s[i] != s[j]) {
 dp[i][j] = false;
 } else {
 if (j - i < 3) {
 dp[i][j] = true;
 } else {
 dp[i][j] = dp[i + 1][j - 1];
 }
 }
 
 if (dp[i][j] && j - i + 1 > maxLen) {
 maxLen = j - i + 1;
 begin = i;
 }
 }
 }
 return s.substr(begin, maxLen);
 }
 };
 
 作者:LeetCode-Solution
 链接:https:
 来源:力扣(LeetCode)
 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 
 | 
Solution&Key Points
递推关系:P(i,j)=P(i+1,j-1) && s[i]==s[j] 
边界条件:P(i,i)=1
遍历方法:固定子串长度进行遍历,方可通过递推关系不遗漏所有情况