Longest Palindromic Substring (Java)

来源:互联网 发布:淘宝店铺编辑宝贝 编辑:程序博客网 时间:2024/06/03 23:05

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.

这道题可以套用Palindrome Partitioning的解题思路不过会超时,暴力也会超时。

有一种Manacher's Algorithm的算法可以将空间复杂度和时间复杂度都降到O(n),下次写注意下。

参考别人用的是时间复杂度O(n^2),空间复杂度O(1)的方法。

"aba" "abba"这两种奇偶中心不一致的情况分开讨论。从中心向两边找。

Source

    public String longestPalindrome(String s) {        if(s.length() == 0) return s;                String str = s.substring(0, 1);        for(int i = 0; i < s.length(); i++){        String temp = center(s, i, i);  //奇数为中心                if(temp.length() > str.length())        str = temp;                temp = center(s, i, i + 1);//偶数为中心        if(temp.length() > str.length())        str = temp;        }        return str;    }        public String center(String s, int begin, int end){  //从中心往外找    while(begin >= 0 && end <= s.length() - 1 && s.charAt(begin) == s.charAt(end)){    begin --;    end ++;    }    return s.substring(begin + 1, end);    }


Test

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


0 0
原创粉丝点击