0
点赞
收藏
分享

微信扫一扫

LeetCode热题100-5

夕颜合欢落 2022-03-11 阅读 71

回文串定义:正着念和反着看是一样的(一个字母也是回文串)
时间复杂度:O(n2)
空间复杂度:O(n2)
解题思路:动态规划(面试)
DP式:在这里插入图片描述
这里的其他情况有两种:1.字串S不是回文串;2.i>j
动态规划的状态转移方程:
在这里插入图片描述
注意:在状态转移方程中,我们是从长度较短的字符串向长度较长的字符串进行转移的,因此一定要注意动态规划的循环顺序。

class Solution {
    public String longestPalindrome(String s) {
        int len = s.length();
        int max_str_len = 1;
        int begin = 0;
        int end = 0;
        char[] sc = s.toCharArray();
        boolean[][] sign = new boolean[len][len];
        if(len < 2){
            return s;
        }
        //让每个单独字符串都标识为回文串
        for(int i = 0; i < len; i++){
            sign[i][i] = true;
        }
        //i表示回文串长度
        for(int i = 2; i <= len; i++){
        	//j表示字符串开始位置
            for(int j = 0; j < len; j++){
                end = j + i -1;
                //其他情况之一
                if(end >= len){
                    break;
                }
                //其他情况之二(if)
                if(sc[j] != sc[end]){
                    sign[j][end] = false;
                }else{
                 	// 考虑头尾去掉以后没有字符剩余,或者剩下一个字符的时候,肯定是回文串
                    if( end - j  < 3){
                        sign[j][end] = true;
                    }else{
                    	//核心:DP状态转移方程
                        sign[j][end] = sign[j + 1][end - 1];
                    }
                }
                if(sign[j][end] == true && i > max_str_len){
                    max_str_len = i;
                    begin = j;
                }
            }
        }
        return s.substring(begin , begin + max_str_len);
    }
}

还有一个复杂度为O(n) 的Manacher 算法。然而本算法十分复杂,一般不作为面试内容。

举报

相关推荐

0 条评论