本题题意非常简单,注意题目中已经将“fast”一词加粗,如果直接二重循环求解,时间复杂度为,题目中告知n最大为
。经验得知,一般1s内时间复杂度不应超过
,因此暴力求解肯定会超时。
既然要挨个比较字符,那么S1的遍历肯定少不了,我们应该在S2上花功夫减少时间。我们可以将S2保存在C++的容器set中,set的查找、插入、删除都为,而且会去掉重复字符,非常符合本题的使用。
set 插入函数 :
- insert(const g) – Adds a new element ‘g’ to the set.
set 判断一个元素是否在set中出现:
- count(const g) – Returns 1 or 0 based on the element ‘g’ is present in the set or not.
下面是AC代码:
#include<iostream>
#include<set>
#include<string.h>
using namespace std;
int main()
{
char S1[10001];
cin.getline(S1,10001);
set<char> tmp;
char S2[10001];
cin.getline(S2, 10001);
for (int i = 0; i < strlen(S2); i++)
{
tmp.insert(S2[i]);
}
for (int i = 0; i < strlen(S1); i++)
{
if (tmp.count(S1[i]) == 0)
{
printf("%c",S1[i]);
}
}
return 0;
}