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

最长公共子序列(二)

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";
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
02-16 22:33
杉川机器人 嵌入式工程师 18.0k*13.0, 年终奖1~9个月浮动
点赞 评论 收藏
分享
02-17 01:46
门头沟学院 Java
咩咩子_:请填空,你是我见过______
点赞 评论 收藏
分享
明天不下雨了:我靠2022了都去字节了还什么读研我教你****:你好,本人985电子科大在读研一,本科西南大学(211)我在字节跳动实习过。对您的岗位很感兴趣,希望获得一次投递机会。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务