题目为求一个字符串最长的回文。
我采用了从一个字符为中心点,然后往左到右遍历的算法,算法复杂度应该为O(n²)
还有一种传说中的算法能把复杂度降为O(n),不过较为复杂就不研究了。
public static String longestPalindrome(String s) { //增加# String st = null; StringBuilder sb = new StringBuilder("#"); for (int i=0; i<s.length(); i++){ sb.append(s.charAt(i)); sb.append("#"); } s = sb.toString(); int max = 0; //记录中心点 int pos = 0; //中间扩展的办法 for (int i=0; i<s.length(); i++){ int temp = 0; int j=i; //判断左右边边界 int left = i - 1; int right = j + 1; while (left>=0 && right < s.length()){ if (s.charAt(left) == s.charAt(right)){ temp++; }else{ break; } left--; right++; } //判断大小 if (max<temp){ pos = i; max = temp; } } //截取字符串 s = s.substring(pos-max, pos+max); s = s.replaceAll("#", ""); return s; }