当前位置: 代码迷 >> 综合 >> Java - PAT - 1033. 旧键盘打字(20)
  详细解决方案

Java - PAT - 1033. 旧键盘打字(20)

热度:71   发布时间:2023-10-09 18:59:09.0

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?

输入格式:

输入在2行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过105个字符的串。可用的字符包括字母[a-z, A-Z]、数字0-9、以及下划线“_”(代表空格)、“,”、“.”、“-”、“+”(代表上档键)。题目保证第2行输入的文字串非空。

注意:如果上档键坏掉了,那么大写的英文字母无法被打出。

输出格式:

在一行中输出能够被打出的结果文字。如果没有一个字符能被打出,则输出空行。

输入样例:
7+IE.
7_This_is_a_test.
输出样例:
_hs_s_a_tst


思路:

用布尔型的数组来记录坏了的键盘,数组下标是字符的ASCII码。遍历要输出的字符串,对应的键盘没有坏就输出。


在练习系统中Java的代码的话,最后一个测试点显示超时。


Java 代码。

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String a = sc.nextLine();String b = sc.nextLine();boolean []broken = new boolean[500];	//用来记录键盘是否坏了for(int i=0 ;i<500 ;i++){broken[i] = false;}for(int i=0 ;i<a.length() ;i++){	//更新坏的键盘的布尔值broken[a.charAt(i)] = true;if(a.charAt(i)>='A'&&a.charAt(i)<='Z'){broken[a.charAt(i)+32] = true;}}//遍历输出for(int i=0 ;i<b.length() ;i++){if(broken['+']){if(!broken[b.charAt(i)]&&(b.charAt(i)<'A'||b.charAt(i)>'Z')){System.out.print(b.charAt(i));}}else{if(!broken[b.charAt(i)]){System.out.print(b.charAt(i));}}}System.out.println();}
}


C++代码:


#include<iostream>
#include<string>using namespace std;int main(){string s1,s2;getline(cin,s1);getline(cin,s2);bool broken[500];//初始化布尔值 for(int i=0 ;i<500 ;i++){broken[i]=false;}//更新布尔值 for(int i=0 ;i<s1.length() ;i++){broken[s1[i]]=true;if(s1[i]>='A'&&s1[i]<='Z'){broken[s1[i]+32]=true;}}//遍历输出 for(int i=0 ;i<s2.length() ;i++){if(broken['+']){if((!broken[s2[i]])&&(s2[i]>'Z'||s2[i]<'A')){cout<<s2[i];}}else{if(!broken[s2[i]]){cout<<s2[i];}}}cout<<endl;return 0;
} 




  相关解决方案