PAT-basic-1029 旧键盘 java c++
一、题目
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
输入格式:
输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _
(代表空格)组成。题目保证 2 个字符串均非空。
输出格式:
按照发现顺序,在一行中输出坏掉的键。其中英文字母只输出大写,每个坏键只输出一次。题目保证至少有 1 个坏键。
输入样例:
7_This_is_a_test
_hs_s_a_es
输出样例:
7TI
二、解析
用hashmap来记录应该出现的字符,如果出现了就置1,没有就置0;
实际出现的字符,出现了就置0,不再考虑;
然后遍历hashmap中还是1的字符,将其放入额外的list中,只需要放一次,所以放完就置0;大小写字母也只需要放一个。
最后遍历list中的字符,如果是小写字母,则输出大写字母,其他的照例输出。
三、代码
java ac版:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
public class Main {
private static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
String text = input.nextLine();
String actText = input.nextLine();
//用hashmap来记录应该出现的字符,如果出现了就置1,没有就置0
HashMap<Character, Boolean> map = new HashMap<>();
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if(!map.containsKey(c))
map.put(c, false);
}
for (int i = 0; i < actText.length(); i++) {
char c = actText.charAt(i);
if(map.containsKey(c))
map.put(c, true);
}
//需要用额外的一个列表来存储坏掉的键,并处理大小写字母,因为大小字母坏了一个,两个都是坏的
ArrayList<Character> list = new ArrayList<>();
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if(!map.get(c)){
if(Character.isAlphabetic(c)){
if(list.contains(Character.toLowerCase(c)) || list.contains(Character.toUpperCase(c)))
continue;
}
list.add(c);
map.put(c, true);
}
}
for (Character e : list) {
if(Character.isAlphabetic(e))
System.out.print(Character.toUpperCase(e));
else
System.out.print(e);
}
}
}
c++ ac版:
//
// Created by dongdong on 2023/4/11.
//
#include <map>
#include <vector>
#include "iostream"
#include "algorithm"
int main(){
char* text=new char [81];
char* actText=new char [81];
scanf("%s %s", text, actText);
// std::cin>>text>>actText;
std::map<char, int> map;
int i=0;
while(text[i] != '\0'){
if(map[text[i]] == 0){
map[text[i]] = 1;
}
i++;
}
for(int j=0; actText[j] !='\0'; j++){
if(map[actText[j]] == 1)
map[actText[j]] = -1;
}
std::vector<char> vec;
for(i=0; text[i] != '\0'; i++){
char ch = text[i];
if(map[ch] == 1){
if((ch >= 'a' && ch <= 'z') || (ch >='A' && ch<='Z')){
auto item = std::find(vec.begin(), vec.end(), tolower(ch));
auto item1 = std::find(vec.begin(), vec.end(), toupper(ch));
if(item != vec.end() || item1 != vec.end()) continue;
}
vec.push_back(ch);
map[ch] = -1;
}
}
for(int i=0; i<vec.size(); i++){
if(islower(vec[i]))
printf("%c", toupper(vec[i]));
else
printf("%c", vec[i]);
}
return 0;
}