Longest Palindromic Substring
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.
Leetcode第5题,题目大概意思是给一个字符串,从中找出最长的回文串,所谓回文串,就是“我爱你你爱我”这样从前从后读起来都是一样的东西啦。
我想到大概解题思路是这样的,从头尾开始,依次比较,如果相同就头增尾减。如果不同,尾节点左移,直到与头尾碰面。这就找到了从该头结点出发的回文串,然后头结点右移,寻找下一结点开始的回文串。虽然时间复杂度达到了惊人的O(n*n),但我猜应该还是能够AC的。
public static String longestPalindrome(String s) {
int i = 0;
int j = s.length()-1;
int k = 0;
int k2 = 0;
int max = 0;
String r = s.substring(0,1);
int flag = 1;
while( k<s.length()){
k = i;
for (k2 = j; k2 > k; k2--) {
if (s.charAt(k) == s.charAt(k2)) {
k++;
flag = 1;
}
// 字符不相同则头结点归位,尾节点右移一个
else {
flag = 0;
k = i;
j--;
k2 = j;
k2++;
}
}
// 找到一个回文串,判断是否最长,最长则存储
if (flag!=0 && j-i+1>max) {
max = j-i+1;
r = s.substring(i, j+1);
}
// 头结点右移
i++;
j = s.length()-1;
}
return r;
}
哎,弄了好久才把case测试对,结果最后告诉我超时,我也是太天真,O(n*n)的也敢搞一搞。
实在想不出来了怎么改进了,去看了下Leetcode的文章,果然大神就是碾压啊。
articles.leetcode.com/2011/11/longest-palindromic-substring-part-ii.html
还有用后缀树实现的。
Leetcode第五题_Longest Palindromic Substring
原文地址:http://blog.csdn.net/bigevil/article/details/45673935