当前位置: 代码迷 >> 综合 >> PAT乙级——1029(字符串匹配)
  详细解决方案

PAT乙级——1029(字符串匹配)

热度:92   发布时间:2023-12-13 06:31:24.0

题目:旧键盘 (20 分)

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

输入格式:
输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _(代表空格)组成。题目保证 2 个字符串均非空。

输出格式:
按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。

输入样例:
7_This_is_a_test
_hs_s_a_es输出样例:
7TI

题目分析及实现

首先这是一个好久没出现过的直接AC的题目,开心一小下。
有几个点需要注意:

  1. 匹配的时候大小写不区分(大小写的按键失效均为一个键)
  2. 输出的时候英文字母均为大写输出
  3. 相同的按键只输出一次

我的思路是循环从第一个字符串中取数据在下一个字符串中匹配(contains方法),没有的话则加入一个空的字符串out中去(不能定义为null,直接加后面的字符串会找不到对象,可以初始化一个汉字),而后每次判断到不存在的时候再去out做一下匹配,也没有的话则加入并输出,有的话则不操作。

import java.util.Scanner;public class Y1029 {
    public static void main(String []args) {
    Scanner in =new Scanner(System.in);String A =in.nextLine();String B =in.nextLine();String out ="";for(int i=0;i<A.length();i++) {
    String temp=A.substring(i, i+1);//当是大写字母时,需匹配这个字母的大写和小写在B中是否存在if(temp.charAt(0)<='Z'&&temp.charAt(0)>='A') {
    //将这个字符转成小写String temp1=temp.toLowerCase();if(B.contains(temp)==false&&B.contains(temp1)==false) {
    	//若不存在加入输出队列if(out.contains(temp)==false&&out.contains(temp1)==false) {
    out+=temp;//System.out.print(temp.charAt(0));}}					}//当是小写字母时,需匹配这个字母的大写和小写在B中是否存在else if(temp.charAt(0)<='z'&&temp.charAt(0)>='a') {
    String temp1=temp.toUpperCase();if(B.contains(temp)==false&&B.contains(temp1)==false)//若不存在加入输出队列if(out.contains(temp)==false&&out.contains(temp1)==false) {
    out+=temp1;//System.out.print(temp1.charAt(0));}}else {
    //其他字符时,只需要判断是否存在if(B.contains(temp)==false) {
    if(out.contains(temp)==false) {
    out+=temp;//System.out.print(temp.charAt(0));}}}}//也可以只输出out,这样就不需要在每一个判断中单独输出System.out.print(out);}
}

在这里插入图片描述