从今天开始全国各地研究生成绩陆陆续续也都出来了,出成绩的时刻总是有人欢喜有人忧,不管怎样,都应该紧锣密鼓的准备起来了,考的好的好好准备复试,考的一般的就得做好两手准备了,是调剂还是找工作。祝愿各位准研究生们都能顺利被自己想去的院校录取。笔者也参加了2020年研究生考试,也祝愿自己能顺利通过复试,拿到录取通知书。
1029 旧键盘 (20分)
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入格式:
输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线_
(代表空格)组成。题目保证 2 个字符串均非空。
输出格式:
按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。
输入样例:
7_This_is_a_test
_hs_s_a_es
输出样例:
7TI
题目解析:
①双重循环找到所有的坏键放到数组badkey[]中
②使用字符的ToUppercase方法把所有的小写字符转换为大写
③再利用双重循环找到badkey中重复的字符,从后往前找,把找到的相同字符置为*号
④输出不是*号的所有字符
AC代码:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
char[] c1=s.next().toCharArray();//第一行
char[] c2=s.next().toCharArray();//第二行
//存放坏键的集合,全部找到之后转换为字符数组
ArrayList<Character> list=new ArrayList<>();
//找所有的坏键
for(int i=0;i<c1.length;i++){
boolean flag=true;
for(int j=0;j<c2.length;j++){
if(c1[i]==c2[j]){//第一行和第二行有字符相同,说明不是坏键
flag=false;//置为false
break;
}
}
if(flag)//如果是true说明c1[i]是坏键
list.add(c1[i]);
}
//把所有坏键放到数组中,同时转换为大写字母
char[] badkey=new char[list.size()];
for(int i=0;i<badkey.length;i++){
badkey[i]=Character.toUpperCase(list.get(i));
}
//找重复的相同的坏键置为*号
for(int i=badkey.length-1;i>0;i--){
for(int j=i-1;j>=0;j--){
if(badkey[i]==badkey[j])
badkey[i]='*';
}
}
//按题目要求输出坏键
for(int i=0;i<badkey.length;i++){
if(badkey[i]!='*'){
System.out.print(badkey[i]);
}
}
}
}
更多题目解析关注公众号算法宝贝