题目链接:点击这里
题意:
通过键盘输入一个单词,因为键盘坏了,所以输入一个单词可能出现这个单词好几个,也可能是一个,判断第二个得到的单词是否是你想要的那个单词。
只要把每个单词的个数按照顺序记录下来,然后从第二个字符串中删掉,只要可以完全删除就对。在加上几个特判。
几组特殊数据:
10
aaaa
aaaab
aaaa
baaaa
a
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
a
b
aaaaa
aaaa
abcdefghijklmnopqrstuvwxyz
zabcdefghijklmnopqrstuvwxyz
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaba
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
abaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
zz
z
aaaabbbbaaaa
aaaaabbbaaaa
output:
NO
NO
YES
NO
NO
NO
NO
NO
NO
NO
AC代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
const int MOD=int(1e9)+7;
using namespace std;
int n,m,t;
int i,j,k,l;
int ans,sum,num,cnt;
char a[1000010];
char b[1000010];
int main()
{
scanf("%d",&n);
getchar();
while(n--)
{
gets(a);
gets(b);
int len1=strlen(a);
int len2=strlen(b);
cnt=0;
if(len2<len1||a[len1-1]!=b[len2-1]||a[0]!=b[0])
{
printf("NO\n");
continue;
}
bool flag=1;
j=0;
for(i=0; i<len1; i++)
{
bool flag1=0;
if(a[i]==a[i+1])
{
cnt++;
continue;
}
//cout<<cnt<<" "<<i<<endl;
if(b[j]==a[i])
{
flag1=1;
for(; j<len2; j++)
{
if(b[j]==b[j+1])
{
cnt--;
}
else
{ j++;
break;
}
}
}
// cout << cnt << endl;
if(cnt>0||flag1==0)
{ flag=0;
break;
}
cnt=0;
}
//cout <<j<< endl;
if(flag==1&&j==len2)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}