leetcode题解-5. Longest Palindromic Substring

来源:互联网 发布:棉先生衣服怎么样 知乎 编辑:程序博客网 时间:2024/05/30 04:53

题意:求一个字符串的最长回文子串。

这道题是比较常考的题目,求回文子串,一般每个子串的中心向两边同时进行扫描,直到不是回文串为止。同时要注意回文子串的奇偶情况,由于回文串的长度可奇可偶,比如”bob”是奇数形式的回文,”noon”就是偶数形式的回文,两种形式的回文都要搜索。

对于每个中心往两边扫描的复杂度为O(n),所以整体时间复杂度为O((2*n-1)*n)=O(n^2),空间复杂度为O(1)。

class Solution {    public String longestPalindrome(String str) {        int len = str.length();        if(len == 0) return "";        if(len == 1) return str;        String longest = str.substring(0, 1);        for (int i = 0; i < str.length(); i++) {            // get longest palindrome with center of i            String tmp = longestSub(str, i, i);            if (tmp.length() > longest.length()) {                longest = tmp;            }            // get longest palindrome with center of i, i+1            tmp = longestSub(str, i, i + 1);            if (tmp.length() > longest.length()) {                longest = tmp;            }        }        return longest;    }    public String longestSub(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);    }    public static void main(String[] args) {        Solution sl = new Solution();        String str = "babad";        System.out.println(sl.longestPalindrome(str));    }}
原创粉丝点击