[leetcode] Longest Palindromic Substring

來源:互聯網
上載者:User

標籤: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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.