0
点赞
收藏
分享

微信扫一扫

蓝桥杯第四天:蓝肽子序列

产品喵dandan米娜 2022-03-25 阅读 7

原题:
在这里插入图片描述
在这里插入图片描述
代码实现:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str1 = sc.next();
        String str2 = sc.next();
        List<String> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
        StringBuffer sb = new StringBuffer();
        // 存储蓝肽,下面的循环也是同样的作用
        for (int i = 0; i < str1.length(); ) {
            sb.setLength(0);
            sb.append(str1.charAt(i++));
            // 判断首字母后面的小写字母,Z的ASCII码为90
            while (i < str1.length() && str1.charAt(i) > 90) {
                sb.append(str1.charAt(i++));
            }
            list1.add(sb.toString());
        }
        for(int i = 0; i < str2.length();) {
            sb.setLength(0);
            sb.append(str2.charAt(i++));
            while(i < str2.length() && str2.charAt(i) > 90) {
                sb.append(str2.charAt(i++));
            }
            list2.add(sb.toString());
        }
        int[][] dp = new int[list1.size() + 1][list2.size() + 1];
        for(int i = 1; i <= list1.size(); i++) {
            String temp = list1.get(i - 1);
            for(int j = 1; j <= list2.size(); j++) {
            	// 如果有相同的蓝肽,即子序列,就+1
                if(temp.equals(list2.get(j - 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[list1.size()][list2.size()]);

    }
}

最近看了一下动态规划,大概有些苗头,但不是特别会,希望大家能指正一下,非常感谢

举报

相关推荐

第四天 作业

Rhcsa第四天

第四天笔记

HCIP 第四天

第四天记录

0 条评论