zoukankan      html  css  js  c++  java
  • hdu5414 CRB and String

    Problem Description
    CRB has two strings s and t.
    In each step, CRB can select arbitrary character c of s and insert any character d (d  c) just after it.
    CRB wants to convert s to t. But is it possible?
     

    Input
    There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case there are two strings s and t, one per line.
    1 ≤ T ≤ 105
    1 ≤ |s| ≤ |t| ≤ 105
    All strings consist only of lowercase English letters.
    The size of each input file will be less than 5MB.
     

    Output
    For each test case, output "Yes" if CRB can convert s to t, otherwise output "No".
     

    Sample Input
    4 a b cat cats do do apple aapple
     

    Sample Output
    No Yes Yes No

    题意:给你两个字符串s1,s2,你可以在s1中选择任意一个字符,并且在后面添加任意与之不同的字符在后面,如果添加若干或者不添加能使s1变成s2,就输出Yes,否则输出No.

    思路:只要满足两个条件就输出Yes:1.两个字符串首字母必须相等且第一个字符串中首字母连续的个数必须小于等于第二个字符。2.对于任意一个字符c,它在第一个字符串中的个数要小于等于第二个字符串的。

    #include<iostream>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<vector>
    #include<map>
    #include<set>
    #include<queue>
    #include<stack>
    #include<string>
    #include<algorithm>
    using namespace std;
    #define maxn 100050
    char s1[maxn],s2[maxn];
    int num1[27],num2[27];
    int main()
    {
        int n,m,i,j,T,len1,len2,flag1,sum1,sum2,flag2,flag;
        char c1,c2;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%s%s",s1,s2);
            if(strcmp(s1,s2)==0){
                printf("Yes
    ");continue;
            }
            len1=strlen(s1);
            len2=strlen(s2);
            c1=s1[0];c2=s2[0];
            if(c1!=c2){
                printf("No
    ");continue;
            }
            memset(num1,0,sizeof(num1));
            memset(num2,0,sizeof(num2));
            sum1=sum2=0;flag1=flag2=1;
            for(i=1;i<len1;i++){
                if(flag1 && s1[i]==s1[0])sum1++;
                else flag1=0;
                num1[s1[i]-'a'+1]++;
            }
            for(i=1;i<len2;i++){
                if(flag2 && s2[i]==s2[0])sum2++;
                else flag2=0;
                num2[s2[i]-'a'+1]++;
            }
            if(sum1<sum2){
                printf("No
    ");continue;
            }
            flag=1;
            for(i=1;i<=26;i++){
                if(num1[i]>num2[i]){
                    flag=0;break;
                }
            }
            if(flag)printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    


  • 相关阅读:
    计算机与软件工程 作业一
    软件工程作业6 咸鱼不闲团队 校园二手交易系统
    软件工程 作业5
    计算与软件工程 作业4
    软件工程第四次作业评价总结
    计算与软件工程 作业3
    计算与软件共程作业2
    计算与软件工程 作业一
    计算与软件工程作业六
    计算与软件工程作业五
  • 原文地址:https://www.cnblogs.com/herumw/p/9464681.html
Copyright © 2011-2022 走看看