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;
} 
posted @ 2024-08-12 11:05  MinimumSpanningTree  阅读(18)  评论(0)    收藏  举报