Java笔试算法-找到字符串中最长的回文子串
题目
给你一个字符串 s,找到 s 中最长的 回文子串。
回文: 正读和反着读顺序一样
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
public static void main(String[] args) {
String s = "dbabcaa";
List<String> temp = new ArrayList<>();
for (int i = 0; i < s.length(); i++) {
// 找出所有子串
for (int j = 0; j < i; j++) {
String sub = s.substring(j, i);
if (isPalindrome(sub)) {
temp.add(sub);
}
}
}
String longest = temp.stream().max(Comparator.comparing(String::length)).get();
System.out.println(longest);
}
public static boolean isPalindrome(String a) {
if (a==null || a.isEmpty()) {
return false;
}
if (a.length() == 1) {
return true;
}
char[] chars = a.toCharArray();
// 翻转字符串
char[] revert = new char[chars.length];
int j = 0;
for (int i = chars.length-1; i>-1 ; i--) {
revert[j++] = chars[i];
}
return new String(revert).equals(a);
}