leetcode Longest Palindromic Substring(Java)

来源:互联网 发布:辣木籽退伍军人淘宝 编辑:程序博客网 时间:2024/06/17 00:30

题目链接:点击打开链接

题目类型:字符串处理

解法:暴力遍历,但是超时了。。。

public class Solution {private String curr;public int isPalidrome(int start, int end){int i = start;int j = end;while (i < j){if (curr.charAt(i) == curr.charAt(j)){++i;--j;}else{return 1;}}return end-start+1;}    public String longestPalindrome(String s) {        int len = s.length();        int max_start = 0;        int max_len = 0;        curr = s;        if (len == 1)         return s;        int curr_len = 0;        for (int i = 0 ; i < len ; ++i)        {        for (int j = i+1 ; j < len ; ++j)        {        curr_len = isPalidrome(i, j);                if (max_len < curr_len)                {                    max_start = i;                    max_len = curr_len;                }                        if (curr_len == len)            return s.substring(max_start, max_start+max_len);        }        }                return s.substring(max_start, max_start+max_len);    }}
解法:动态规划

    public String longestPalindrome(String s)    {    int len = s.length();    int max_len = 1;    int max_start = 0;    boolean[][] palindrome = new boolean[len][len];        if (len < 2)    return s;        for (int i = 0 ; i < len ; ++i)    {    palindrome[i][i] = true;     }        for (int i = 0 ; i < len - 1 ; ++i)    {    if (s.charAt(i) == s.charAt(i+1))    {    palindrome[i][i+1] = true;    max_len = 2;    max_start = i;    }    }        for (int c_len = 3 ; c_len <= len ; ++c_len)    {    for (int i = 0 ; i < len - c_len + 1 ; ++i)    {    int j = i + c_len - 1;    if (palindrome[i+1][j-1] && (s.charAt(i) == s.charAt(j)))    {    palindrome[i][j] = true;    max_start = i;    max_len = c_len;    }    }    }        return s.substring(max_start, max_start + max_len);    }

解法:从中心扩展验证回文子串

public class Solution {private int max_start;private int max_len;private void extendPalindrome(String s, int start, int end){while (start >=0 && end < s.length() && s.charAt(start) == s.charAt(end)){--start;++end;}if (max_len < end - start- 1){max_start = start + 1;max_len = end - start - 1;}}    public String longestPalindrome(String s) {    int len = s.length();    if (len < 2)    return s;        for (int i = 0 ; i < len ; ++i)    {    extendPalindrome(s, i, i);    extendPalindrome(s, i, i+1);    }        return s.substring(max_start, max_start + max_len);    }}