题目描述
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。
现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入格式
输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。
每段文字是不超过 80 个字符的串,由字母 A-Z
(包括大、小写)、数字 0-9
、以及下划线 _
(代表空格)组成。
题目保证 2 个字符串均非空。
输出格式
按照发现顺序,在一行中输出坏掉的键,其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。
输入样例
7_This_is_a_test
_hs_s_a_es
输出样例
7TI
题解
Set 去重:
解题步骤
:
- 先将两个字符串都转换成大写;
- 然后将
str2
中的字母都加入集合中去; - 最后依次枚举
str1
中的所有字母,如果该字母未在集合中,就说明这个键是坏的,则将其输出;
#include <iostream>
#include <set>
using namespace std;
set<char> st;
void upper(string &s)
{
for (int i = 0; i < s.size(); i ++)
if(s[i] >= 'a' && s[i] <= 'z')
s[i] -= 32;
}
int main()
{
string a, b;
cin >> a >> b;
upper(a);
upper(b);
for (int i = 0; i < b.size(); i ++) st.insert(b[i]);
for (int i = 0; i < a.size(); i ++)
if(!st.count(a[i]))
{
cout << a[i];
st.insert(a[i]);
}
return 0;
}
题解二:
#include <iostream>
using namespace std;
bool st[500];
void upper(string &s)
{
for (int i = 0; i < s.size(); i ++)
if(s[i] >= 'a' && s[i] <= 'z')
s[i] -= 32;
}
int main()
{
string a, b;
cin >> a >> b;
upper(a);
upper(b);
int j = 0;
for (int i = 0; i < a.size(); i ++)
{
if(a[i] == b[j]) j ++;
else
{
if(!st[a[i]])
{
st[a[i]] = true;
cout << a[i];
}
}
}
return 0;
}