2023年码蹄杯三赛I题-小狗巴克 题型:字符串处理

40 阅读1分钟

码题集OJ-小狗巴克 (matiji.net)

我刚开始是这样写的:

#include<bits/stdc++.h>
using namespace std;

int main()
{
	string a,b;cin>>a>>b;

	int flag=1;
	for(int i=0;i<b.size();i++)
	{
		if(a.find(b[i])==string::npos)
		{
			flag=0;
		}
	}
	if(flag)cout<<"True";
	else cout<<"False";
	
	
	return 0;
}

image.png

下面这段代码AC了:

#include<bits/stdc++.h>
using namespace std;

int main()
{
	string a,b;cin>>a>>b;
	
	
	string temp;
	for(int i=0;i<a.size();i++)
	{
		if(a[i]!='!')
		temp+=a[i];
	}
	
	if(temp.find(b)!=string::npos)
		cout<<"True";
	else cout<<"False";
	return 0;
}

image.png

原因是因为第一段代码调用find()函数太多了,find()函数的时间复杂度是线性的,而下面的代码只调用了一次find()函数,因此效率更高。