题目:
Given a string S,
find the longest palindromic substring in S.
You may assume that the maximum length of S is
1000, and there exists one unique longest palindromic substring.
思路:
1000之内暴力可以解决。关键就是,如何考虑aa的情况。aba这种情况,挨个字母探索就行。问题就是偶数对称的情况。
我寻找了一个办法能够将奇数和偶数的统一当做偶数处理。即:将所有字母的两边都加上一个填充字符,包括第一个字符前面和最后一个字符后面,
都填充字符。这样,S也就变成2000的数量级了,到了最后别忘了去掉填充的字符即可。暴力搜索依旧是可以的。
AC代码:
public class Longest_Palindromic_Substring { private int maxLen = -1; private int start = -1; private int end = -1; private int findLongest(char[] ss, int idx){ int i=1; for(;idx+i<ss.length && idx-i>=0 && ss[idx+i]==ss[idx-i];i++); return i-1; } public String longestPalindrome(String s) { char[] ss = s.toCharArray(); StringBuffer sb = new StringBuffer(""); for(char c:ss){ sb.append(' '); sb.append(c); } sb.append(' '); char[] bb = sb.toString().toCharArray(); for(int i=1;i<bb.length-1;i++){ int tmp = findLongest(bb,i); if(maxLen<tmp){ maxLen=tmp; start = i-maxLen; end = i+maxLen; } } if(start==-1){ start = 0; end = 0; } String sbb = sb.toString().substring(start,end+1); return sbb.replaceAll(" ",""); } public static void main(String[] args){ Longest_Palindromic_Substring longest_palindromic_substring = new Longest_Palindromic_Substring(); System.out.println(longest_palindromic_substring.longestPalindrome("a")); } }