java解决pat乙级练习题1029.旧键盘

来源:互联网 发布:淘宝网小虫米子 编辑:程序博客网 时间:2024/06/04 18:21

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

输入格式:

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

输出格式:

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

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

思路:
1.将输入的两个字符串,都转化为字符list,再将第一个字符list1中含有第二个字符list2中的字符删除。
2.将list2清空,再将list1中重复的字符删掉,转化成大写字母,并赋给list2,最后将list2转化成字符串输出。

代码如下:

import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Scanner;public class Main{  public static void main(String [] args){    Scanner r = new Scanner(System.in);    char[] begin = r.next().toCharArray();    char[] end = r.next().toCharArray();    String result = "";    List<Character> list1 = new ArrayList<Character>();    List<Character> list2 = new ArrayList<Character>();    for(char m : begin)    {        list1.add(m);    }    for(char n : end)    {        list2.add(n);    }    list1.removeAll(list2);//将list1中含有list2字符的全部删除。    list2.clear();    for(char s: list1){        if(s <= 'z' && s >= 'a')            s = (char)(s - 32);        if(Collections.frequency(list2, s) == 0) //重点知识,可以检测list中是否含重复字符。        {            list2.add(s);        }    }    for(int i = 0; i < list2.size(); i++)    {        result += list2.get(i).toString();    }    System.out.print(result);  }}

其中,Collections.frequency(list2, s) == 0 的原型函数为:

public static int frequency(Collection<?> c, Object o) {        int result = 0;        if (o == null) {            for (Object e : c)                if (e == null)                    result++;        } else {            for (Object e : c)                if (o.equals(e))                    result++;        }        return result;    }

本人才疏学浅,如有疑问或改进,欢迎提出。

原创粉丝点击