Java学习笔记
Leetcode刷题经验
热题HOT100
5、最长回文子串
首先,搞清楚回文串的概念:如果它是回文串,并且长度大于 2,那么将它首尾的两个字母去除之后,它仍然是个回文串。
解题思路:
这里直接借鉴官方提供的解题思路:
时间复杂度: O ( n 2 ) O(n^2) O(n2),其中 n n n是字符串 的长度,每个状态在进行转移时的时间复杂度为 O ( 1 ) O(1) O(1)。而它的空间复杂度亦为: O ( n 2 ) O(n^2) O(n2),即为存储所有状态使用的空间。
class Solution {
public String longestPalindrome(String s) {
int len = s.length();
if(len < 2) {return s;}
int maxLen = 1;
int begin =0;
boolean[][] dp = new boolean[len][len];
for(int i = 0;i<len;i++) {dp[i][i]=true;}
char[] chars = s.toCharArray();
for(int j=1;j<len;j++){
for(int i = 0;i < j;i++){
if(chars[i]!=chars[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.substring(begin,begin+maxLen);
}
}
欢迎大家交流,一起进步!