输入两个字符串,从第一字符串中删除第二个字符串中所有的字符
样例
样例 1:
输入: str=”They are students”,sub=”aeiou”
输出: ”Thy r stdnts”
注意事项
1≤len(str),len(sub)≤105
首先拿到题,这里有一个不成熟的常规方案,就是挨着遍历两个字符串,找到相同的就删掉。但是时间复杂度太高,不优秀。如下:
class Solution {
public:
/**
* @param str: The first string given
* @param sub: The given second string
* @return: Returns the deleted string
*/
string CharacterDeletion(string &str, string &sub)
{
// write your code here
string target;
for(int i = 0; i < sub.size(); i++)
{
char ch = sub[i];
for(int j = 0; j < str.size(); j++)
{
char source = str[j];
if(str[j] == ch)
{
str = str.erase(j, 1);
j--;
}
}
}
target = str;
return target;
}
};
下面有一个比较优秀的做法就是,将sub字符串拆开放到一个哈希表中,然后再遍历str字符串去查看str中的字符在哈希表中是否存在,若存在就放到一个新的字符串中,如下:
class Solution {
public:
/**
* @param str: The first string given
* @param sub: The given second string
* @return: Returns the deleted string
*/
string CharacterDeletion(string &str, string &sub)
{
// write your code here
string res;
unordered_map<char, bool> hashMap;
for (size_t i = 0; i < sub.length(); ++i)
{
if (!hashMap.count(sub[i])) hashMap[sub[i]] = true; //将sub存到哈希表中
}
for (size_t i = 0; i < str.length(); ++i)
{
if (!hashMap.count(str[i])) res += str[i];
}
return res;
}
};