采用哈希映射,更快

删除公共字符

http://www.nowcoder.com/questionTerminal/f0db4c36573d459cae44ac90b90c6212

如果使用暴力输出的话,也是可以的,就是遍历两个字符串将其中重复的删除掉,但是会牵扯到数据的移动,相对来说效率是较低的。
而如果我们使用哈希映射的话,则能够更加快捷的完成。

  1. 使用哈希映射,将第二个字符串中的数据全部映射到所对应的hashtable之中
  2. 从第一个字符串中找相对应的位置,看是否存在
  3. 创建新的字符串,存储其不重复的值,这样是为了避免每一次删除重复时候所产生的移动数据的消耗
  4. 直接将找到不重复的数据进行追加即可。
    #include <iostream>
    #include <string>
    using namespace std;
    int main() {
     string str1;
     getline(cin,str1);
     string str2;
     getline(cin, str2);
     int hashtable[256]={0};//采用哈希映射
     for(size_t i=0;i<str2.length();i++){
         hashtable[str2[i]]++;//将第二个字符串中存在的字符全部映射到相对应的位置中去
     }
     string ret;//设置新字符串
     for(size_t i=0;i<str1.length();i++){
         if(hashtable[str1[i]]==0){//从哈希表中找对应的值,若存在即值等于1,不存在即等于0
             ret+=str1[i];//若等于0则追加在ret字符中后
         }
     }
     cout<<ret<<endl;
     return 0;
    }
全部评论

相关推荐

后来123321:别着急,我学院本大二,投了1100份,两个面试,其中一个还是我去线下招聘会投的简历,有时候这东西也得看运气
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务