美文网首页
最长回文子串(快手校招题目)

最长回文子串(快手校招题目)

作者: 正经龙 | 来源:发表于2019-08-17 15:53 被阅读0次
1
2

动态规划的解法

以adbca为例子

状态数组dp[i][j]表示从 i~j最大的回文串长度


状态转移方程为

初始状态数组

a\d\b\c\a

1 2 3 4 5
1 1
2 0 1
3 0 0 1
4 0 0 0 1
5 0 0 0 0 1

第一次遍历 len = 2时 状态数组

ad\db\bc\ca

1 2 3 4 5
1 1 1
2 0 1 1
3 0 0 1 1
4 0 0 0 1 1
5 0 0 0 0 1

第三次遍历 len = 3

adb\dbc\bca

1 2 3 4 5
1 1 1 1
2 0 1 1 1
3 0 0 1 1 1
4 0 0 0 1 1
5 0 0 0 0 1

第四次遍历 len = 4

adbc\dbca

1 2 3 4 5
1 1 1 1 1
2 0 1 1 1 1
3 0 0 1 1 1
4 0 0 0 1 1
5 0 0 0 0 1

第五次遍历 len = 5

adbca

1 2 3 4 5
1 1 1 1 1 3
2 0 1 1 1 1
3 0 0 1 1 1
4 0 0 0 1 1
5 0 0 0 0 1

代码

    public static void main(String args[]){
        
        Scanner sc = new Scanner(System.in);
        char[] array = sc.next().toCharArray();

        //字符串长度
        int N = array.length;
        int[][] dp = new int[N][N];
        //状态数组
        for(int i = 0; i < N;dp[i][i] = 1,i++){}
        for(int len = 2; len <= N;len++ ){
            for(int i = 0; i + len <= N;i++){
                if(array[i] == array[i+len-1]){
                    dp[i][i+len-1] = dp[i+1][i+len-2]+2;
                }
                 dp[i][i+len-1] = Math.max(dp[i][i+len-1],Math.max(dp[i][i+len-2],dp[i+1][i+len-1]));
                
            }
        }
        
        System.out.println(dp[0][N-1]);

思考

该问题具有最优子结构问题,从i - j 的最长回文串等于 i+1~j-1的最长回文串+2 或 i+1~j 或 i~j-1的最长回文串
只要知道了状态转移的规律,就可以很容易写出代码

相关文章

  • 最长回文子串(快手校招题目)

    动态规划的解法 以adbca为例子 状态数组dp[i][j]表示从 i~j最大的回文串长度 初始状态数组 a\d\...

  • Manacher's Algorithm 马拉车算法

    题目:Longest Palindromic Substring 题目简述 找出最长回文子串,如输入"babad"...

  • 【leetcode-动态规划】最长回文子串

    【leetcode-动态规划】最长回文子串 题目: 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s...

  • LeetCode练手系列——最长回文子串

    题目:最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。 示例 ...

  • LeetCode-5-最长回文子串

    LeetCode-5-最长回文子串 题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长...

  • Leetcode 5 最长回文子串

    最长回文子串 题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例...

  • 最长回文子串

    最长回文子串 题目 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000 摘要 ...

  • 最长回文子串(马拉车算法)

    5:最长回文子串 题目: 给你一个字符串 s,找到 s 中最长的回文子串。 解法1:中心扩展法 思路分析: 思路异...

  • leetcode 5

    题目 5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。...

  • 5.最长回文子串

    链接 LeeCode-5-最长回文子串 参考 知乎 Git 题目描述 给定一个字符串 s,找到 s 中最长的回文子...

网友评论

      本文标题:最长回文子串(快手校招题目)

      本文链接:https://www.haomeiwen.com/subject/woqksctx.html