【编程题 】抄送列表(详细注释 易懂)

题目描述

题目链接:抄送列表__牛客网

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!");
           }
          
            
        }
        
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值