采用哈希映射,更快
删除公共字符
http://www.nowcoder.com/questionTerminal/f0db4c36573d459cae44ac90b90c6212
如果使用暴力输出的话,也是可以的,就是遍历两个字符串将其中重复的删除掉,但是会牵扯到数据的移动,相对来说效率是较低的。
而如果我们使用哈希映射的话,则能够更加快捷的完成。
- 使用哈希映射,将第二个字符串中的数据全部映射到所对应的hashtable之中
- 从第一个字符串中找相对应的位置,看是否存在
- 创建新的字符串,存储其不重复的值,这样是为了避免每一次删除重复时候所产生的移动数据的消耗
- 直接将找到不重复的数据进行追加即可。
#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; }