题目
题目链接
解题思路
- 字符删除:遍历第一个字符串,检查每个字符是否在第二个字符串中。
- 构建新字符串:如果字符不在第二个字符串中,则将其添加到结果字符串中。
- 输出结果:输出最终构建的字符串。
#include <iostream>
#include <unordered_set>
#include <string>
using namespace std;
string removeCharacters(const string& s1, const string& s2) {
unordered_set<char> charsToRemove(s2.begin(), s2.end());
string result;
for (char c : s1) {
if (charsToRemove.find(c) == charsToRemove.end()) {
result += c; // 只添加不在s2中的字符
}
}
return result;
}
int main() {
string s1, s2;
getline(cin, s1);
getline(cin, s2);
cout << removeCharacters(s1, s2) << endl; // 输出结果
return 0;
}
import java.util.HashSet;
import java.util.Scanner;
public class Main {
public static String removeCharacters(String s1, String s2) {
HashSet<Character> charsToRemove = new HashSet<>();
for (char c : s2.toCharArray()) {
charsToRemove.add(c);
}
StringBuilder result = new StringBuilder();
for (char c : s1.toCharArray()) {
if (!charsToRemove.contains(c)) {
result.append(c); // 只添加不在s2中的字符
}
}
return result.toString();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s1 = sc.nextLine();
String s2 = sc.nextLine();
System.out.println(removeCharacters(s1, s2)); // 输出结果
sc.close();
}
}
def remove_characters(s1, s2):
# 使用集合提高查找效率
chars_to_remove = set(s2)
result = ''.join([char for char in s1 if char not in chars_to_remove])
return result
if __name__ == "__main__":
s1 = input().strip()
s2 = input().strip()
print(remove_characters(s1, s2))
算法及复杂度分析
- 算法:循环模拟
- 时间复杂度:\(\mathcal{O}(n + m)\),其中 \(n\) 是第一个字符串的长度,\(m\) 是第二个字符串的长度。我们需要遍历第一个字符串并检查每个字符是否在第二个字符串中。
- 空间复杂度:\(\mathcal{O}(m)\),用于存储第二个字符串中的字符集合。