前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >蓝桥杯官网 试题 PREV-255 历届真题 蓝肽子序列【第十一届】【决赛】【研究生组】【C++】【Java】【Python】三种解法

蓝桥杯官网 试题 PREV-255 历届真题 蓝肽子序列【第十一届】【决赛】【研究生组】【C++】【Java】【Python】三种解法

作者头像
红目香薰
发布2022-11-30 17:01:46
2350
发布2022-11-30 17:01:46
举报
文章被收录于专栏:CSDNToQQCode

为帮助大家能在6月18日的比赛中有一个更好的成绩,我会将蓝桥杯官网上的历届决赛题目的四类语言题解都发出来。希望能对大家的成绩有所帮助。

今年的最大目标就是能为【一亿技术人】创造更高的价值。


资源限制

内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

C++

代码语言:javascript
复制
# include <stdio.h>
# include <string.h>
char temp[1005];
char s1[1005][1005];   //下标从1到cnt
char s2[1005][1005];
int cnt1,cnt2;
int dp[1005][1005];
int main()
{
	gets(temp);
	int cnt=0;
	for(int i=0;i<strlen(temp);++i)
	{
		if(temp[i]>='A'&&temp[i]<='Z')
		{
			cnt=0;
			s1[++cnt1][cnt++]=temp[i];
		}
		else
		{
			s1[cnt1][cnt++]=temp[i];
		}
	}
	gets(temp);
	cnt=0;
	for(int i=0;i<strlen(temp);++i)
	{
		if(temp[i]>='A'&&temp[i]<='Z')
		{
			cnt=0;
			s2[++cnt2][cnt++]=temp[i];
		}
		else
		{
			s2[cnt2][cnt++]=temp[i];
		}
	}
	for(int i=1;i<=cnt1;++i)
	{
		for(int j=1;j<=cnt2;++j)
		{
			if(strcmp(s1[i],s2[j])==0)dp[i][j]=dp[i-1][j-1]+1;
			else dp[i][j]=dp[i-1][j]>dp[i][j-1]?dp[i-1][j]:dp[i][j-1];
		}
	}
	printf("%d",dp[cnt1][cnt2]);
	return 0;
}

Java

代码语言:javascript
复制
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String text1 = in.nextLine();
        String text2 = in.nextLine();
        int n = text1.length();
        int m = text2.length();

        String[] s1 = new String[1000];
        int index1 = 0;
        int cnt1 = 0;
        for(int i=1;i<n;i++){
            char c = text1.charAt(i);
            if(c>='A'&&c<='Z'){
                s1[cnt1]=text1.substring(index1,i);
                index1=i;
                cnt1++;
            }
        }
        s1[cnt1++]=text1.substring(index1,n);

        String[] s2 = new String[1000];
        int index2 = 0;
        int cnt2 = 0;
        for(int i=1;i<m;i++){
            char c = text2.charAt(i);
            if(c>='A'&&c<='Z'){
                s2[cnt2]=text2.substring(index2,i);
                index2=i;
                cnt2++;
            }
        }
        s2[cnt2++]=text2.substring(index2,m);

        int[][] dp = new int[cnt1+1][cnt2+1];
        for(int i=1;i<cnt1+1;i++){
            for(int j=1;j<cnt2+1;j++){
                if(s1[i-1].equals(s2[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[cnt1][cnt2]);
    }
}

Python

代码语言:javascript
复制
def f(s,t):  
    S = [0]            #存放s划分后的蓝肽  
    S_Up = []          #记录s中大写字母的下标  
    T = [0]            #存放s划分后的蓝肽  
    T_Up = []          #记录t中大写字母的下标  
    for i in range(len(s)):  
        if 'A' <= s[i] <= 'Z':  
            S_Up.append(i)  
    S_Up.append(len(s))   #此处要在最后再添加一个s的长度,以便后面划分字符串  
       
    for i in range(len(t)):  
        if 'A' <= t[i] <= 'Z':  
            T_Up.append(i)  
    T_Up.append(len(t))   #此处要在最后再添加一个t的长度,以便后面划分字符串  
   
    for i in range(len(S_Up)-1):  #对s划分蓝肽  
        l = S_Up[i]  
        r = S_Up[i+1]  
        S.append(s[l:r])  
   
    for i in range(len(T_Up)-1):  #对t划分蓝肽  
        l = T_Up[i]  
        r = T_Up[i+1]  
        T.append(t[l:r])  
   
    n = len(S)  
    m = len(T)  
    dp = [[0 for j in range(m)] for i in range(n)]    #查找最长子序列  
    for i in range(1,n):  
        for j in range(1,m):  
            if S[i] == T[j]:  
                dp[i][j] = dp[i-1][j-1]+1  
            else:  
                dp[i][j] = max(dp[i][j-1],dp[i-1][j])  
   
    print(dp[n-1][m-1])  
       
   
if __name__ == '__main__':  
    s = input().strip()  
    t = input().strip()  
    f(s,t)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C++
  • Java
  • Python
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档