#include <iostream>
#include <unordered_set>
using namespace std;
int Compare(char c,string d)
{
for(int s=0;s<int(d.size());s++)
{
if(c==d[s])
{
return 1;
}
}
return 0;
}
int main (){
string a;
getline(cin,a);
string b;
string c;
getline(cin,b);
for(int i=0;i<int(a.size());i++)
{
if(Compare(a[i],b)==0)
{
c+=a[i];
}
}
cout<<c;
}
最终:
#include <iostream>
#include <unordered_set>
using namespace std;
int main (){
unordered_set<char> hash;
string a;
getline(cin,a);
string b;
string c;
getline(cin,b);
for(auto s : b) hash.insert(s);
for(auto m : a)
{
if(!hash.count(m))
c+=m;
}
cout<<c;
}
解决Time Limit Exceeded
其他题解:
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[200]; //利用桶来标记出现的字符
int main()
{
getline(cin,s1);
getline(cin,s2);
int len1=s1.length();
int len2=s2.length();
for(int i=0;i<len2;i++)
{
a[s2[i]]=1; //把出现的字符都标记一下
}
for(int i=0;i<len1;i++)
{
if(a[s1[i]]==0) //仅输出在s2没出现的字符
{
cout<<s1[i];
}
}
printf("\n");
return 0;
}
作者:Wraith_G
链接:https://www.acwing.com/solution/content/38989/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
思路1
设置一个哈希表数组表示字符串 b 中出现了哪些字符,遍历字符串 a 将未出现的字符进行输出,否则跳过即可。
用 flag[256] 数组变量标记 str2 出现过的字符为 true,输出str1 的时候根据 flag[str1[i]] 是否为 true ,如果是 true 就不输出。
代码1
#include <iostream>
using namespace std;
const int maxn = 256;
bool flag[maxn];
int main()
{
string a, b;
getline(cin, a);
getline(cin, b);
for (int i = 0; i < b.length(); i++)
flag[b[i]] = true;
for (int i = 0; i < a.length(); i++)
if (!flag[a[i]])
cout << a[i];
cout << endl;
return 0;
}
作者:liuxiaocs
链接:https://www.acwing.com/solution/content/10844/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。