这道题可以用循环直接暴力解决,也可以用哈希表优化。
暴力。。。
1.搞一个bool函数判断s1中的字符在s2中是否出现。
2.创造一个新的string函数读入没有出现过的字符。
3.带空格的字符串用getline读入。
4.虽然输入的时候要用getline这样空格也可以读入到string内,但是遍历的时候可以直接遍历空格。不会受影响,比如说可以for(inti=0;a[i];i++)因为字符串最后一个是‘/0’;也可以for(auto c:a)
#include <iostream>
using namespace std;
string s1,s2;
bool check(char c){
for(auto k:s2){
if(k==c) return false;}
return true;}
int main()
{ getline(cin,s1);
getline(cin,s2);
string s;
for(auto c:s1){
if(check(c))s+=c;
}
cout<<s;
return 0;}
哈希表
用哈希表来读入s2中的每一个字符,然后用count函数,看s2中是否有s1中的字符。
哈希表增删改查的时间复杂度都是o(1)的。
可以直接把o(n)的复杂度降到o(1);
hash插入insert,看字符是否出现过count
#include <iostream>
#include <unordered_set>
using namespace std;
int main(){
string s1,s2;
getline(cin,s1);
getline(cin,s2);
string s;
unordered_set<char>hash;
for(auto c:s2)hash.insert(c);
for(auto c:s1)
if(!hash.count(c))s+=c;
cout<<s;
return 0;
}