码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode第五题_Longest Palindromic Substring

时间:2015-05-12 23:09:34      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:leetcode   回文串   substring   

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

还有用后缀树实现的。

http://blog.csdn.net/g9yuayon/article/details/2574781

Leetcode第五题_Longest Palindromic Substring

标签:leetcode   回文串   substring   

原文地址:http://blog.csdn.net/bigevil/article/details/45673935

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!