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

最长公共子序列(二)

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

using System;
using System.Collections.Generic;


class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * longest common subsequence
     * @param s1 string字符串 the string
     * @param s2 string字符串 the string
     * @return string字符串
     */
    public string LCS (string s1, string s2) {
        var dp = new int[s1.Length+1,s2.Length+1];
        for(int i = 0; i <= s1.Length; i++){
            dp[i,0] = 0;
        }
        for(int i = 0; i <= s2.Length; i++){
            dp[0,i] = 0;
        }
        for(int i = 1; i <= s1.Length; i++){
            for(int j = 1; j <= s2.Length; j++){
                if(s1[i-1] == s2[j-1]){
                    dp[i,j] = dp[i - 1,j -1] + 1;
                }
                else if(dp[i - 1,j] >= dp[i,j-1]){
                    dp[i,j] = dp[i - 1,j];
                }
                else{
                    dp[i,j] = dp[i,j - 1];
                }
            }
        }

        var res = new List<char>();
        for(int i = s1.Length, j = s2.Length; dp[i,j] > 0;){
            if(s1[i-1] == s2[j - 1]){
                res.Add(s1[i - 1]);
                i--;
                j--;
            }
            else if(dp[i,j] <= dp[i - 1,j]){
                i--;
            }
            else{
                j--;
            }
        }
        res.Reverse();
        return res.Count > 0 ? new string(res.ToArray()) : "-1";
    }
}

全部评论

相关推荐

05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
06-18 13:28
已编辑
门头沟学院 Web前端
爱睡觉的冰箱哥:《给予你300的工资》,阴的没边了
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-08 10:39
一个证都没&nbsp;我能填什么
程序员小白条:别人有,你为什么没有,还是这个道理,社会就是比较,竞争,淘汰,你要安逸,那么就要做好淘汰的准备
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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