题解 | #删除公共字符#

删除公共字符

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;
}
全部评论

相关推荐

2024-12-26 20:46
复旦大学 C++
国棉17厂丶小王:拿了offer的那个周末晚上去网吧通宵,去网吧不知道玩什么刷了lc的每日一题,然后试着第一次打开了三角洲行动,从此少了一个已经刷了700道题的lc用户,但是烽火地带多了一只🐭🐭
点赞 评论 收藏
分享
02-17 20:43
西北大学 Java
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务