刚开始一看以为要KMP,后来发现并非是连续子串,那么直接两个for解决即可
#include<iostream>
#include<string>
#include<cmath>
#define M 100005
using namespace std;
char s1[M],s2[M];
int main()
{
int len1,len2,i,j,k,flag;
while(scanf("%s%s",s1,s2)!=EOF)
{
len1=strlen(s1);
len2=strlen(s2);
k=0;
flag=1;
for(i=0;i<len1&&flag;i++)
{
for(j=k;j<len2;j++)
if(s1[i]==s2[j]) //若发现相等,下次对s2的检测从j+1开始
{
k=j+1;
break;
}
else if(j==len2-1) //如果s2检测到末尾了还未发现相等,则退出
{
flag=0;
break;
}
}
if(flag)
cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}