当前位置:首页 > 编程笔记 > 正文
已解决

最长公共子序列 递归

来自网友在路上 196896提问 提问时间:2023-11-19 00:26:57阅读次数: 96

最佳答案 问答题库968位专家为你答疑解惑

private static int recursion(char[] charsA, char[] charsB, int i, int j) {

 

        int iMax = charsA.length - 1;

        int jMax = charsB.length - 1;

        三种递归结束条件

        i,j都到达了字符串末尾

        if(i== iMax && j==jMax){

            return charsA[i]==charsB[j]?1:0;

        }

       i到达了字符串末尾,只有j能加1了

       if(i==iMax){

            if(charsA[i] == charsB[j]){

                return 1;

            }else {

                return recursion(charsA,charsB,i,j+1);

            }

        }

      j到达了字符串末尾,只有i才能往后移动了

      if(j==jMax){

            if(charsA[i] == charsB[j]){

                return 1;

            }else {

                return recursion(charsA,charsB,i+1,j);

            }

        }

            普遍情况:i和j都没有到达字符串末尾

            跳过j位置,让i位置和j+1位置的字符比较

            int p1 = recursion(charsA,charsB,i,j+1);

            跳过i位置

            int p2 = recursion(charsA,charsB,i+1,j);

            比较i位置和j位置的字符

            如果相等,结果加1,继续比较i+1和j+1

            如果不等,该情况可转化为上面两种情况,直接赋值为0

赋值0保证了p3不会超过p1/p2

            int p3 = charsA[i]==charsB[j]?(1+recursion(charsA,charsB,i+1,j+1)):0;

            return Math.max(p1,Math.max(p2,p3));

        

 

    }

 

 

 

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"最长公共子序列 递归":http://eshow365.cn/6-38785-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!