- 算法(力扣)- Java
- 动态规划(解法)
- 最长回文字符串
声明:都是自己刷题中的解法(有的可能不是最好的解法),用于自己分析,记录
动态规划(解法) 最长回文字符串题目:给你一个字符串 s,找到 s 中最长的回文子串。
思路:
1.如果字符串的长度小于2,则字符串时回文字符串
2.找到最长字符出啊,使用substring方法截取返回。
3.所以需要找到最长字符串的起始位置和长度。定义起始位置begin和最大长度maxLen
4.可以定义一个存储boolean值的二维数组,来存放回文数。
5.依次从字符串长度为0-字符串长度的字符串中找回文数。
6.在找的过程当中,i - j < 2的情况下,找到所有如aa,bb,cc和单独的a ,b,c,d等的回文数。
7.在找的过程当中,i - j >=2的情况下,通过每次判断bln[j+1] [i-1]来去确定从j+1de位置到i-1的位置时回文字符串。再判断i和j位置的值是否相等,来确定bln[j] [i]是回文的。(这里会依次从低长度慢慢找到高长度)/
8.在找的过程当中,通过每次bln[j] [i]找到回文字符串,并且该字符串的长度i-j+1大于最大长度maxLen。从而每次更新begin和maxLen的值。
class Solution {
public String longestPalindrome(String s) {
if(s.length() < 2){
return s;
}
int maxLen = 0;
int begin = 0;
boolean[][] bln = new boolean[s.length()][s.length()];
for(int i=0;imaxLen){
begin = j;
maxLen = i-j+1;
}
}
}
return s.substring(begin,begin+maxLen);
}
}



