一道简单的模拟题。
$T$ 分为两种情况,一种是完全属于 $S$ 的子串,另一种是前 $2$ 个字符是 $S$ 的子串,第 $3$ 个字符是 X
。
于是我们可以分这两种情况判断。为了方便判断子串我们先把 $S$ 全部转为大写字母,再遍历判断 $T$ 是否是 $S$ 的子串。如果 $T$ 的第 $3$ 个字符是 X
,就可以再判断一遍 $T $ 的前 $2$ 个字符是否是 $S$ 的子串。
时间复杂度 $O(n)$,可以轻松通过本题。
#include<iostream>
#include<cstdio>
using namespace std;
string s,t;
int n,p=0;
bool flag;
int main()
{
cin>>s>>t;
n=s.size();
for(int i=0;i<n;i++) s[i]+='A'-'a';
if(t[2]=='X')
{
for(int i=0;i<n;i++)
{
if(p<=1&&s[i]==t[p]) p++;
}
if(p>1) flag=true;
}
p=0;
for(int i=0;i<n;i++)
{
if(p<=2&&s[i]==t[p]) p++;
}
if(p>2) flag=true;
flag?printf("Yes"):printf("No");
return 0;
}