题目描述
题目链接:抄送列表__牛客网
NowCoder每天要处理许多邮件,但他并不是在收件人列表中,有时候只是被抄送。他认为这些抄送的邮件重要性比自己在收件人列表里的邮件低,因此他要过滤掉这些次要的邮件,优先处理重要的邮件。
现在给你一串抄送列表,请你判断目标用户是否在抄送列表中。
输入描述:
输入有多组数据,每组数据有两行。 第一行抄送列表,姓名之间用一个逗号隔开。如果姓名中包含空格或逗号,则姓名包含在双引号里。总长度不超过512个字符。 第二行只包含一个姓名,是待查找的用户的名字(姓名要完全匹配)。长度不超过16个字符。
输出描述:
如果第二行的名字出现在收件人列表中,则输出“Ignore”,表示这封邮件不重要;否则,输出“Important!”,表示这封邮件需要被优先处理。
示例1
输入
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<String> 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!");
}
}
}
}