题意:
给S,T两个串,可以无限次选择在S串里一个字符后面添加一个字符,但是添加的这个字符不能和选择的字符相同,问S串能不能变成T串。
思路:
经过观察发现,如果S和T长度一样直接判。
如果不一样的话,只要满足
1、S里面的所有字符的顺序都在T串里出现过
2、T前面相同的字符和S的前部分能匹配
这里两个条件,就能构成。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#include<stack>
using namespace std;
#define ll __int64
char x[123456],y[123456];
int main()
{
int t;
cin>>t;
while(t--)
{
scanf("%s%s",x,y);
int a,b;
a=strlen(x);
b=strlen(y);
int f=1;
if(a==b)
{
if(strcmp(x,y)==0) f=1;
else f=0;
}
else
{
int i,j;
for(i=1;i<b;i++) if(y[i]!=y[i-1]) break;
for(j=0;j<i;j++)
{
if(x[j]!=y[j]) break;
}
if(j!=i) f=0;
if(f)
{
int cnt=a-i;
for(;i<a;i++)
{
for(;j<b;j++)
{
if(x[i]==y[j])
{
cnt--;
break;
}
}
}
if(cnt==0) f=1;
else f=0;
}
}
puts(f==1?"Yes":"No");
}
return 0;
}