题目链接:抄送列表__牛客网
NowCoder每天要处理许多邮件,但他并不是在收件人列表中,有时候只是被抄送。他认为这些抄送的邮件重要性比自己在收件人列表里的邮件低,因此他要过滤掉这些次要的邮件,优先处理重要的邮件。
现在给你一串抄送列表,请你判断目标用户是否在抄送列表中。
输入有多组数据,每组数据有两行。 第一行抄送列表,姓名之间用一个逗号隔开。如果姓名中包含空格或逗号,则姓名包含在双引号里。总长度不超过512个字符。 第二行只包含一个姓名,是待查找的用户的名字(姓名要完全匹配)。长度不超过16个字符。
输出描述:
如果第二行的名字出现在收件人列表中,则输出“Ignore”,表示这封邮件不重要;否则,输出“Important!”,表示这封邮件需要被优先处理。
输入
Joe,Kewell,Leon Joe "Letendre, Bruce",Joe,"Quan, William" William输出
Ignore Important!
这个题成为四星题,题目要占一半原因,“这些抄送的邮件重要性比自己在收件人列表里的邮件低” ,它这句话明明表达的意思是 如果要发送的邮件人 不在列表里,那它的重要性就比较低。但输出描述又说,在收件人列表里,那它的重要性比较低,让找找要发邮件的人,在不在收件人列表里。
感觉说的有点像绕口令,对不起,我有罪!
那题目大概懂了,就说解题思想,就是先把输入的字符串进行解析,把每个名字提出来(以逗号为界),如果遇到双引号,就把双引号里面的所有内容提出来。 这个提的过程需要稍微注意一下,就是遇到双引号就要把到下一个引号之前的所有内容提出来,否则就是把逗号之前的所有内容提出来。 我今天遇到个问题就是,我每次是等遇到逗号,才进行截取,这就出现一个问题,那就是当走到最后一个字符时,由于后面没有逗号了,而循环又走完了,导致最后一个名字提取不出来,那么当第二行输入的名字正好是收件人列表中最后一个名字时,就会得到错误的结果。 但是这个问题,我一直没有发现,给我卡了好久,真是痛苦哇。
- // write your code here
- import java.util.*;
- public class Main{
- public static void main(String[] args){
- Scanner scan = new Scanner(System.in);
- while(scan.hasNextLine()){
- String names = scan.nextLine();
- names +=",";
- HashSet
set = new HashSet<>(); - String tmp="";
- boolean flag =true;
- for(int i=0;i< names.length();i++){
- if(flag){
- if(names.charAt(i) =='"'){
- flag = false;
- continue;
- }
- if(names.charAt(i) == ','){
- set.add(tmp);
- tmp ="";
- continue;
- }
-
- tmp += names.charAt(i);
- }else{
- if(names.charAt(i)=='"'){
- set.add(tmp);
- tmp = "";
- flag = true;
- continue;
- }
- tmp+= names.charAt(i);
-
- }
-
- }
- String objectName = scan.nextLine();
- if(set.contains(objectName)){
- System.out.println("Ignore");
- }else{
- System.out.println("Important!");
- }
-
-
- }
-
- }
- }