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


  • 相关阅读:
    AtCoDeer and Election Report
    乒乓球
    dp(装箱)
    《非你莫属》面试者现场跟面试官用英文对话,一口流利的英语口语厉害了
    冬天喝酸奶,可以加热吗?冬天喝酸奶,这4个方面要注意
    滑县两个富豪打赌,一人吃了一泡狗屎
    为什么外国富豪都喜欢捐光所有财产
    发的微博有敏感词
    社交网络
    怎么把word中的文字拉细变瘦长
  • 原文地址:https://www.cnblogs.com/herumw/p/9464681.html
Copyright © 2011-2022 走看看