题目
![]()
解法1:用数组
点击查看代码
#include<iostream>
#include<string>
using namespace std;
int main() {
string s1, s2;
getline(cin, s1); // 原始字符串(应该输入的)
getline(cin, s2); // 实际输入的字符串
// 标记哪些键是好的(已经出现过的),全部转成大写
bool good[256] = {false};
for (char c : s2) {
// 如果是小写字母,转成大写
if (c >= 'a' && c <= 'z') {
c = c - 'a' + 'A';
}
good[(int)c] = true;
}
// 记录是否已经输出过该坏键
bool bad[256] = {false};
for (char c : s1) {
char upperC = c;
// 转成大写
if (c >= 'a' && c <= 'z') {
upperC = c - 'a' + 'A';
}
// 如果它不是好的,并且是从没出现过的
if (!good[(int)upperC] && !bad[(int)upperC]) {
cout << upperC;
bad[(int)upperC] = true;
}
}
return 0;
}
解法2:用unordered_set
点击查看代码
#include <iostream>
#include <unordered_set>
using namespace std;
int main() {
string s1, s2;
getline(cin, s1);
getline(cin, s2);
unordered_set<char> good;
for (char c : s2) {
if (c >= 'a' && c <= 'z') c = c - 'a' + 'A';
good.insert(c);
}
unordered_set<char> bad;
for (char c : s1) {
if (c >= 'a' && c <= 'z') c = c - 'a' + 'A';
if (good.find(c) == good.end() && bad.find(c) == bad.end()) {
cout << c;
bad.insert(c);
}
}
return 0;
}