题目描述
输入两个字符串,从第一字符串中删除第二个字符串中所有的字符
样例 1:
输入: str=”They are students”,sub=”aeiou”
输出: ”Thy r stdnts”
注意事项
String contains spaces(包含空格)
1 ≤ len(str),len(sub) ≤105
思路+代码
第一反应就是双循环遍历,但是根据提示的长度,感觉会很费时间甚至超时,
所以空间换时间,用一个hash数组记录要删除的字符(对应的ASCII码)。遍历原字符串,把不删的字符拼成一个新字符串返回。
public class Solution {
/**
* @param str: The first string given
* @param sub: The given second string
* @return: Returns the deleted string
*/
public String CharacterDeletion(String str, String sub) {
//hash数组
int[] res = new int[10000];
//StringBuilder的拼接速度快
StringBuilder sb = new StringBuilder();
//记录删除的字符
for (int i = 0; i < sub.length(); i++) {
res[sub.charAt(i)] ++;
}
//拼接字符串
for (int i = 0; i < str.length(); i++) {
if(res[str.charAt(i)]>0){
continue;
}else{
sb.append(str.charAt(i));
}
}
//返回新字符串
return sb.toString();
}
}
结果: