Leetcode第五题_Longest Palindromic 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值