题解 | #删除公共字符#
删除公共字符
https://www.nowcoder.com/practice/f0db4c36573d459cae44ac90b90c6212
一、暴力循环
去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;
}
拼多多集团-PDD公司福利 817人发布