一、暴力循环
去str1里面找str2的值,然后erase。
时间复杂度
#include <iostream> #include <string> using namespace std; int main() { string str1, str2; getline(cin, str1); cin >> str2; for(size_t j = 0; j < str2.size(); ++j){ while(str1.find(str2[j]) != string::npos) str1.erase(str1.find(str2[j]), 1); } cout << str1 << endl; return 0; }
二、哈希
题目说了全是字符,而字符最多也就128个,因此定义一个hash[128];
遍历 str2 ,将对于的 hash 值++
再遍历 str1 ,借助 hash 判断 str1 有无要删除的字符。没有的话就加到 ret 上去。
#include <iostream> #include <string> using namespace std; int main() { string str1, str2; getline(cin, str1); // cin遇到空格就结束了,用getline输入一行 getline(cin, str2); int hash[128] = {0}; string ret; for(int i = 0; i < str2.size(); ++i) hash[str2[i]]++; for(int i = 0; i < str1.size(); ++i){ if(hash[str1[i]] == 0) ret += str1[i]; } cout << ret << endl; return 0; }