删除公共字符串
1. 题目描述
题目链接:删除公共字符穿
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。
例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
2. 输入输出示例及描述
输入输出描述
每个测试输入包含2个字符串
输出删除后的字符串
示例1
输入:
They are students. aeiou
输出:
Thy r stdnts.
3. 解题思路及源码
思路:
方法一:暴力查找字符串1中每一个字符是否存在于字符串2中
方法二:将字符串2映射至一个hashtable数组中,用来判断字符串1中的字符是否存在于字符串2中
注意:
- 这里读取输入时,不可以使用cin,因为cin遇到空格就不再读取后面的字符串了
- 创建出一个新字符串保存答案,不要再原有的字符串中进行字符挪动,那样太麻烦
解法一(暴力法)
#include <iostream>
using namespace std;
int main()
{
// 1.读取数据
string s1,s2;
getline(cin,s1);
getline(cin,s2);
// 2.暴力查找并删除
for(int i = 0; i < s2.size(); i++)
for(int j = 0 ; j < s1.size(); j++)
if(s1[j] == s2[i])
{
s1.erase(j , 1);
continue; //后面元素前移动一位,当前元素需要重新判定
}
cout << s1 << endl;
return 0;
}
解法二(HashTable法)
#include<iostream>
#include<string>
using namespace std;
int main()
{
// 1.数据读取
string str1,str2;
getline(cin, str1);
getline(cin, str2);
// 2.统计字符串2中每个字符重复次数
int hashtable[256] = {0};
for(size_t i = 0; i < str2.size(); ++i)
{
hashtable[str2[i]]++;
}
// 3.遍历字符串1,判断每一个字符是否存在于hashtable中
string ret;
for(size_t i = 0; i < str1.size(); ++i)
{
if(hashtable[str1[i]] == 0) //若不存在则将该字符加入新字符串中
ret += str1[i];
}
cout<<ret<<endl;
return 0;
}