旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入格式:
输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _(代表空格)组成。题目保证 2 个字符串均非空。
输出格式:
按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。
输入样例:
1 | 7_This_is_a_test |
输出样例:
1 | 7TI |
思路:
记应该输入的字符串为input,实际输入的字符串为real_input,遍历两个字符串,分别加入两个set中(可以去重,但set会按值的大小自动排序,所以给后面带来了麻烦)。由于输出格式是字母以大写形式输出,故在遍历时将小写字母toupper。s1中出现而s2中未出现的即坏掉的键,for循环遍历s1,内层嵌套一个判断s2.find(s1[i])==s2.end()就可以把s1中出现而s2中找不到的元素加入s3中。对input去重得到new_input,因为要按照input中字符出现的顺序输出s3中的元素,所以是遍历去重后的new_input字符串的大循环里嵌套其与s3中元素是否相等的判断new_input[i] == *it。
代码:
1 | /*字符串处理*/ |
收获:
一开始没对input去重,就提交了代码,只有测试点4没过,然后卡了一段时间,发现当输入为:
1 | 7_TTThis_is_a_test |
我的代码就是错的,我多么希望在每道题卡某个测试点的时候,能知道这个测试点的数据,我自己找错找得挺辛苦的,而且自己从拿到题想好思路然后写出代码去提交,我不想看别人已经AC的代码,因为我自己的主体是对的,下一次我面对同类型题,我还是会按照这样的思路写,我所要做的就是知道哪儿没考虑完全,我要用自己最初的代码AC。回到这道题,当我没对input去重,得到s3,按照input的顺序输出,这样我的输出会是7TT,因为没做到同一个字符只输出一次。而且对字符串去重也是我今天才学到的知识,本代码的去重是保留相同字符第一次出现位置,以下为保留最后一次出现位置。
1 |
|