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

最长公共子序列(一)

http://www.nowcoder.com/practice/672ab5e541c64e4b9d11f66011059498

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        input.nextLine();
        String s1;
        s1 = input.nextLine();
        String s2 = input.nextLine();
        
        int[][] dp = new int[s1.length() + 1][s2.length() + 1];
        for(int i = 1; i <= s1.length(); i++){
            for(int j = 1; j <= s2.length(); j++){
                if(s1.charAt(i - 1) == s2.charAt(j - 1)){
                    //如果有s2中有s1对应的字符
                    //那么这个字符可以作为最长公共子序列的终点
                    //dp[i][j]的含义就是s1从0到i,s2从0到j时的最长公共子序列的长度
                    //与前文的对应关系为dp[i][j] = dp[i-1][j-1]+1
                    dp[i][j] = dp[i-1][j-1] + 1;
                }else{
                    //说明该字符不可以作为最长公共子序列的终点
                    //其值应置为此前的最长公共子序列长度
                    dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]);
                }
            }
        }
        System.out.println(dp[s1.length()][s2.length()]);
    }
}

全部评论

相关推荐

你背过凌晨4点的八股文么:简历挂了的话会是流程终止,像我一样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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