(LintCode字符删除)给出两个字符串 str 和 sub,你的任务是在 str 中完全删除那些在 sub 中存在的字符。
借鉴于学习:老铁咖啡:跟LintCode的算法题杠上了(1905字符删除)
main方法
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入字符串1:");
String str1 = sc.nextLine();
System.out.print("请输入字符串2:");
String sub1 = sc.nextLine();
String str = characterDelet(str1,sub1);
System.out.println("输出:" + str);
}
方法一
List<String> charList = new ArrayList<>();
for (int i = 0; i < sub.length(); i++){
String cha = sub.substring(i,i+1);
charList.add(cha);
}
for (String cha : charList){
str = str.replace(cha,"");
}
方法二
StringBuffer sb = new StringBuffer();
Boolean hasChar = false;
for (int i = 0; i < str.length(); i++){
for (int j = 0; j < sub.length(); j++){
if (str.charAt(i) == sub.charAt(j)){
hasChar = true;
break;
}else {
hasChar = false;
}
}
if (!hasChar){
sb.append(str.charAt(i));
hasChar = false;
}
}
return sb.toString();
方法三
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++){
if (sub.contains(StringUtils.nvl(str.charAt(i)))){
continue;
}else{
sb.append(str.charAt(i));
}
}
return sb.toString();
方法四
StringBuffer sb = new StringBuffer();
Set s = new LinkedHashSet();
for (int i = 0; i < sub.length(); i++){
s.add(sub.charAt(i));
}
for (int i = 0; i<str.length();i++){
if (!s.contains(str.charAt(i))){
sb.append(str.charAt(i));
}
}
return sb.toString();
方法五
int[] temp = new int[256];
for (int i = 0; i < sub.length(); i++){
temp[sub.charAt(i)]++;
}
StringBuffer ans = new StringBuffer("");
for (int i = 0; i < str.length(); i++) {
if (temp[str.charAt(i)] == 0) {
ans.append(Character.toString(str.charAt(i)));
}
}
return ans.toString();
结果