AT_abc349_c [ABC349C] Airport Code 题解
一道简单的模拟题。
\(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;
}

浙公网安备 33010602011771号