题解 | #最长公共子序列(二)#

最长公共子序列(二)

http://www.nowcoder.com/practice/6d29638c85bb4ffd80c020fe244baf11

import java.util.*;


public class Solution {
    /**
     * longest common subsequence
     * @param s1 string字符串 the string
     * @param s2 string字符串 the string
     * @return string字符串
     */
    public String LCS(String s1, String s2) {
        char[] chs1 = s1.toCharArray();
        char[] chs2 = s2.toCharArray();
        int m = chs1.length, n = chs2.length;
        if (m == 0 || n == 0) {
            return "-1";
        }
        //f[i][j]表示第一个字符串以第i个字符结尾,第二个字符串以第j个字符串结尾的最长公共子序列长度
        int[][] f = new int[m + 1][n + 1];
        /*
         * 状态转移方程:
         *   f[i][j] = f[i-1][j-1]+1  a[i] = b[j]
         *   f[i][j] = max{ f[i-1][j], f[i][j-1] } a[i] != b[j]
         * 边界条件:
         *   f[0][j] = f[i][0] = 0
         */
        int i, j = 0;
        //根据状态转移方程,计算最长公共子序列的值
        for (i = 1; i <= m; i++) {
            for (j = 1; j <= n; j++) {
                if (chs1[i - 1] == chs2[j - 1]) {
                    f[i][j] = f[i - 1][j - 1] + 1;
                } else {
                    f[i][j] = Math.max(f[i - 1][j], f[i][j - 1]);
                }
            }
        }
        //没有公共子序列
        if (f[m][n] == 0) {
            return "-1";
        }
        i = m;
        j = n;
        String str = "";
        while (i > 0 && j > 0) {
            //当前末尾元素为公共子序列的值
            if (chs1[i - 1] == chs2[j - 1]) {
                str = chs1[i - 1] + str;
                i--;
                j--;
                //哪个元素大向哪块移动
            } else if (f[i][j - 1] > f[i - 1][j]) {
                j--;
            } else {
                i--;
            }
        }
        return str;
    }
}
全部评论

相关推荐

zhiyog:哈哈哈哈哈哈哈哈哈哈哈哈哈
点赞 评论 收藏
分享
06-10 21:15
门头沟学院 Java
宁阿:好多这种没🧠的公司,他们估计都不知道毕业的人不能给安排实习岗
实习吐槽大会
点赞 评论 收藏
分享
湫湫湫不会java:1.在校经历全删了2.。这些荣誉其实也没啥用只能说,要的是好的开发者不是好好学生3.项目五六点就行了,一个亮点一俩行,xxx技术解决,xxx问题带来xxx提升。第一页学历不行,然后啥有价值的信息也没有,到第二页看到项目了,第一个项目九点,第二个项目像凑数的俩点。总体给人又臭又长,一起加油吧兄弟
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务