importjava.util.HashSet;importjava.util.Scanner;publicclassMain{publicstaticStringremoveCharacters(String s1,String s2){HashSet<Character> charsToRemove =newHashSet<>();for(char c : s2.toCharArray()){
charsToRemove.add(c);}StringBuilder result =newStringBuilder();for(char c : s1.toCharArray()){if(!charsToRemove.contains(c)){
result.append(c);// 只添加不在s2中的字符}}return result.toString();}publicstaticvoidmain(String[] args){Scanner sc =newScanner(System.in);String s1 = sc.nextLine();String s2 = sc.nextLine();System.out.println(removeCharacters(s1, s2));// 输出结果
sc.close();}}
defremove_characters(s1, s2):# 使用集合提高查找效率
chars_to_remove =set(s2)
result =''.join([char for char in s1 if char notin chars_to_remove])return result
if __name__ =="__main__":
s1 =input().strip()
s2 =input().strip()print(remove_characters(s1, s2))
算法及复杂度分析
算法:循环模拟
时间复杂度:
O
(
n
+
m
)
\mathcal{O}(n + m)
O(n+m),其中
n
n
n 是第一个字符串的长度,
m
m
m 是第二个字符串的长度。我们需要遍历第一个字符串并检查每个字符是否在第二个字符串中。
空间复杂度:
O
(
m
)
\mathcal{O}(m)
O(m),用于存储第二个字符串中的字符集合。