一、题目链接:5-最长回文子串
二、原题目:
给你一个字符串 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
三、题目思路
最基础的解题思路就是动态规划,此处需要一个图来说明解答过程…
就是每次将最大的回文子串保留起来,用一个数组,来存储回文子串的状态。
四、代码:
class Solution {
public String longestPalindrome(String s) {
// 动态规划
int n = s.length();
if(n <= 1){
return s;
}
String ans = "";
boolean[][] dp = new boolean[n][n];
for(int l = 0; l < n; l++){
// l 是长度
for(int i = 0; i + l < n; i++){
// i 是下标
int j = i + l;
if(l == 0){
dp[i][j] = true;
}else if(l == 1){
dp[i][j] = s.charAt(i) == s.charAt(j);
}else{
dp[i][j] = s.charAt(i) == s.charAt(j) & 1][j - 1];
}
if(dp[i][j] 1 > ans.length()){
ans = s.substring(i, j + 1);
}
}
}
return ans;
}
}