Leetcode 5.最长回文子串 动态规划_主函数

 

 



/*
* @lc app=leetcode.cn id=5 lang=cpp
*
* [5] 最长回文子串
*
* https://leetcode-cn.com/problems/longest-palindromic-substring/description/
*
* algorithms
* Medium (33.99%)
* Likes: 3590
* Dislikes: 0
* Total Accepted: 567.4K
* Total Submissions: 1.7M
* Testcase Example: '"babad"'
*
* 给你一个字符串 s,找到 s 中最长的回文子串。
*
*
*
* 示例 1:
*
*
* 输入:s = "babad"
* 输出:"bab"
* 解释:"aba" 同样是符合题意的答案。
*
*
* 示例 2:
*
*
* 输入:s = "cbbd"
* 输出:"bb"
*
*
* 示例 3:
*
*
* 输入:s = "a"
* 输出:"a"
*
*
* 示例 4:
*
*
* 输入:s = "ac"
* 输出:"a"
*
*
*
*
* 提示:
*
*
* 1
* s 仅由数字和英文字母(大写和/或小写)组成
*
*
*/


思路:

​labuladong​

子函数为输入s,i,j,从i,j开始判断s[i]==s[j],然后返回子串,主函数遍历字符串,然后分别调用i,i和i,i+1这两种奇数长度和偶数长度的子串查找。

特别注意,while(i>=0&&j<s.size()&&s[i]==s[ij])这里出while时,i与j都是不符合条件的,因此取字符串时i+1,j-1



class Solution {
public:
string longestPalindrome(string s) {
string res;
for(int i=0;i<s.size();++i){
string s1=palindrome(s,i,i);
string s2=palindrome(s,i,i+1);
if(s1.size()>res.size()) res=s1;
if(s2.size()>res.size()) res=s2;
}
return res;
}
string palindrome(string s, int i, int j){
while(i>=0&&j<s.size()&&s[i]==s[j]){
i--;
j++;
}
return s.substr(i+1,j-i-1);
}
};