4 a b cat cats do do apple aapple
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\n");continue; } len1=strlen(s1); len2=strlen(s2); c1=s1[0];c2=s2[0]; if(c1!=c2){ printf("No\n");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\n");continue; } flag=1; for(i=1;i<=26;i++){ if(num1[i]>num2[i]){ flag=0;break; } } if(flag)printf("Yes\n"); else printf("No\n"); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/kirito_acmer/article/details/47842237