leetcode-5. 最长回文子串

题解思路:中心扩散法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public String longestPalindrome(String s) {
String ans = "";
for(int i = 0; i < s.length(); i++){
String s1 = palindrome(s, i, i);
String s2 = palindrome(s, i, i+1);
ans = ans.length() > s1.length() ? ans : s1;
ans = ans.length() > s2.length() ? ans : s2;
}
return ans;
}

// 中心扩散法
public String palindrome(String s,int l, int r){
while(l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)){
// 向两边扩展
l--;
r++;
}
return s.substring(l+1, r);
}
}

题解思路:动态规划

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public String longestPalindrome(String s) {
int n = s.length();
boolean[][] dp = new boolean[n][n];
String ans = "";
for (int l = 0; l < n; l++) {
for (int i = 0; i+l < n; i++) {
int j = i + l;
if (l == 0) {
//i和j的间隔为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) && dp[i + 1][j - 1];
}

if (dp[i][j] && l + 1 > ans.length()) {
ans = s.substring(i, j + 1);
}
}
}
return ans;
}
}