leetcode 字符串_5最长回文子串
- 暴力求解
(1)求出所有子串
(2)单独判断每个字串是不是回文子串
public static String longestPalindrome(String s) {
if (s == null || s.isEmpty()) {
return "";
}
String res = "";
int max = 0;
for (int i = 0; i < s.length(); i++) {
for (int j = i + 1; j <= s.length(); j++) {
String substring = s.substring(i, j);
if (isPalindrome(substring) && max < substring.length()) {
res = substring;
max = Math.max(max, substring.length());
}
}
}
return res;
}
public static boolean isPalindrome(String s) {
String reverse = new StringBuilder(s).reverse().toString();
if (reverse.equals(s)) {
return true;
}
return false;
}
public String longestPalindrome(String s) {
int len = s.length();
if (len < 2) {
return s;
}
int maxLen = 1;
int start = 0;
for (int i = 0; i < len - 1; i++) {
int oddLen = expandAroundCenter(s, i, i);
int evenLen = expandAroundCenter(s, i, i + 1);
int curMaxLen = Math.max(oddLen, evenLen);
if (curMaxLen > maxLen) {
maxLen = curMaxLen;
start = i - (maxLen - 1) / 2;
}
}
return s.substring(start, start + maxLen);
}
private int expandAroundCenter(String s, int left, int right) {
int len = s.length();
int i = left;
int j = right;
while (i >= 0 && j < len) {
if (s.charAt(i) == s.charAt(j)) {
i--;
j++;
} else {
break;
}
}
return j - i - 1;
}