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

[leetcode] Longest Palindromic Substring

时间:2014-06-27 12:46:45      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:class   blog   code   java   http   tar   

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.

https://oj.leetcode.com/problems/longest-palindromic-substring/

思路1(naive approach):依次检查所有的子串(n^2),判断是否是palindrome(n),复杂度 O(n^3)。

思路2(dp):dp[i][j] 代表从i到j的子串是否是palindrome。自下而上自左而右计算dp数组。时空复杂度都是 O(n^2)。

    dp[i][j]=1  if:

  1.     i=j;
  2.     s.charAt(i)==s.charAt(j)    &&    j-i<2
  3.     s.charAt(i)==s.charAt(j)    &&    dp[i+1][j-1]==1

 

思路3:遍历字符串的每个字符,从这个字符出发(或者这个字符和下一个字符出发)向两侧辐射找出最长的子串。时间复杂度 O(n^2),空间复杂度O(1)。

思路4:Manacher‘s algorithm。时空复杂度O(n)。有待研究。

 

DP代码:

public class Solution {
    public String longestPalindrome(String s) {
        if (s == null || s.length() == 0)
            return null;
        int start = 0;
        int end = 0;
        int len = 0;
        boolean[][] dp = new boolean[s.length()][s.length()];
        for (int i = s.length() - 1; i >= 0; i--) {
            for (int j = i; j < s.length(); j++) {
                if (i == j || (s.charAt(i) == s.charAt(j) && j - i < 2)
                        || (s.charAt(i) == s.charAt(j) && dp[i + 1][j - 1])) {
                    dp[i][j] = true;
                    if (j - i + 1 > len) {
                        len = j - i;
                        start = i;
                        end = j + 1;
                    }
                }

            }
        }

        return s.substring(start, end);
    }

    public static void main(String[] args) {
        System.out.println(new Solution().longestPalindrome("ababadccd"));
        System.out.println(new Solution().longestPalindrome("a"));
        System.out.println(new Solution().longestPalindrome(""));

    }

}

 

参考:

 

http://www.programcreek.com/2013/12/leetcode-solution-of-longest-palindromic-substring-java/

http://www.cnblogs.com/TenosDoIt/p/3675788.html

http://blog.csdn.net/worldwindjp/article/details/22066307

[leetcode] Longest Palindromic Substring,布布扣,bubuko.com

[leetcode] Longest Palindromic Substring

标签:class   blog   code   java   http   tar   

原文地址:http://www.cnblogs.com/jdflyfly/p/3810674.html

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