1、暴力解法
package leetcode;
class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
String str = "cbbd";
System.out.println(solution.longestPalindrome(str));
}
public String longestPalindrome(String s) {
// 边界值分析, 字符串等于1或者为空,则直接返回该串就行
if (s.length() < 2) {
return s;
}
// 分别记录子串截取起始位置和截取的最大长度
int begin = 0;
int maxLen = 1;
char[] chars = s.toCharArray();
// 外层循环是截取子串的起始位置,最大为倒数第二个就行
for (int i = 0; i < s.length() - 1; i++) {
// 从开始位置的下一个开始到末尾进行截取和判断
for (int j = i + 1; j < s.length(); j++) {
// 严格长度大于1的子串,ab这样的
if (j - i + 1 > maxLen && isPalindrome(chars, i, j)) {
maxLen = j - i + 1;
begin = i;
}
}
}
return s.substring(begin, maxLen + begin);
}
private boolean isPalindrome(char[] chars, int i, int j) {
while (i < j) {
if (chars[i] != chars[j]) {
return false;
}
i++;
j--;
}
return true;
}
}