NowCoder每天要处理许多邮件,但他并不是在收件人列表中,有时候只是被抄送。他认为这些抄送的邮件重要性比自己在收件人列表里的邮件低,因此他要过滤掉这些次要的邮件,优先处理重要的邮件。
现在给你一串抄送列表,请你判断目标用户是否在抄送列表中。
输入有多组数据,每组数据有两行。
第一行抄送列表,姓名之间用一个逗号隔开。如果姓名中包含空格或逗号,则姓名包含在双引号里。总长度不超过512个字符。
第二行只包含一个姓名,是待查找的用户的名字(姓名要完全匹配)。长度不超过16个字符。
如果第二行的名字出现在收件人列表中,则输出“Ignore”,表示这封邮件不重要;否则,输出“Important!”,表示这封邮件需要被优先处理。
Joe,Kewell,Leon Joe "Letendre, Bruce",Joe,"Quan, William" William
Ignore Important!
#include<iostream> #include<string> using namespace std; int main() { string s, res; while (getline(cin, s)) { getline(cin, res); bool sta = false; for (int i = 0; i < s.length(); i++) { string t; if (s[i] == '"') { i++; while (i<s.length()&&s[i] != '"') { t += s[i]; i++; } if (t == res) { sta = true; break; } } else if (s[i] != ',') { while (i<s.length()&&s[i] != ',') { t += s[i]; i++; } if (t == res) { sta = true; break; } } } if (sta == true) cout << "Ignore" << endl; else cout << "Important!" << endl; } return 0; }
用哈希表记录名字,注意每次括号的内容
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<functional>
#include <map>
#include <set>
#include <unordered_set>
#include <unordered_map>
#include <exception>
#include <iomanip>
#include <memory>
#include <sstream>
#define INF 1000000
using namespace std;
int main(int argc, char** argv)
{
//freopen("in.txt", "r", stdin);
string s;
while (getline(cin, s))
{
unordered_set<string> names;
string name = "";
bool inBracket = false;
for (auto& c : s)
{
if (c == '\"')
{
inBracket = !inBracket;
}
else if (c == ',')
{
if (inBracket) name += c;
else
{
names.emplace(name);
name = "";
}
}
else
{
name += c;
}
}
names.emplace(name);
getline(cin, name);
cout << (names.find(name) != names.end() ? "Ignore" : "Important!") << endl;
}
return 0;
}
// write your code here cpp #include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; int main() { string str,name; while(getline(cin,str)) { getline(cin,name); //接下来把抄送列表分割 vector<string>v; for(size_t i=0;i<str.size();i++) { if(str[i]=='\"'){//处理有引号的部分 v.push_back(str.substr(i+1,str.find('\"',i+1)-i-1)); i=str.find('\"',i+1)+1; } else{//处理非引号部分 if(str.find(',',i)==str.npos){ v.push_back(str.substr(i,str.size()-i)); i=str.size(); } else{//没到结束 v.push_back(str.substr(i,str.find(',',i)-i)); i=str.find(',',i); } } } cout<<((find(v.begin(),v.end(),name)!=v.end())?"Ignore":"Important!")<<endl; } return 0; }
import java.util.LinkedList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()){ String str=in.nextLine(); String verStr=in.nextLine(); char[] cA = str.toCharArray(); int len=str.length(); LinkedList<String> list=new LinkedList<String>(); StringBuilder sb=new StringBuilder(); int count=0; for (int i = 0; i < len; i++) { char c = cA[i]; if(c=='"'){ count++; } else{ if(count==1){ sb.append(c); } else if(count==0){ if(c==','){ list.add(sb.toString()); sb=new StringBuilder(); } else{ sb.append(c); } } } if(count==2){ list.add(sb.toString()); sb=new StringBuilder(); count=0; i++;//避免间隔符--逗号 } else if(i==len-1){//最后一组不是引号组 list.add(sb.toString()); } } int size=list.size(); String sArr[]=new String[size]; for (int i = 0; i < size; i++) { // System.out.println(list.get(i)); sArr[i]=list.get(i); } boolean flag=false; for (int i = 0; i < size; i++) { if(sArr[i].equals(verStr)){ System.out.println("Ignore"); flag=true; break; } } if(flag){ continue; } else{ System.out.println("Important!"); } } } }
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNextLine()) { String s = sc.nextLine(); String name = sc.nextLine(); char[] ch = s.toCharArray(); List<String> list = new ArrayList<>(); int flag = 0; String res = ""; for (int i = 0; i < ch.length; i ++ ) { if(flag == 0 && ch[i] == '"') { flag = 1; list.add(res); res = ""; } else if(flag == 1 && ch[i] == '"') { flag = 0; list.add(res); res = ""; } else if(flag == 1) { res += ch[i]; } else if(flag == 0 && ch[i] != ',') { res += ch[i]; } } list.add(res); boolean isFinded = false; for (String string:list) { if(name.equals(string)) { isFinded = true; break; } } if(isFinded) System.out.println("Ignore"); else System.out.println("Important!"); } } }
#include <iostream> #include <string> using namespace std; bool isImportant(string& list, string& name) { char delim = ','; // 默认以‘,’作为姓名的分隔符 for (int i = 0; i < list.size(); i++) { if (list[i] == '"') { delim = '"'; continue; } string people; while (list[i] != delim) { people += list[i++]; } if (people == name) return false; delim = ','; } return true; } int main() { string list, name; while (getline(cin, list)) { getline(cin, name); list += ','; if (isImportant(list, name)) cout << "Important!" << endl; else cout << "Ignore" << endl; } }
import java.util.*; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextLine()) { char[] chars = in.nextLine().toCharArray(); Set<String> set = new HashSet<>(); StringBuilder curName = new StringBuilder(); boolean flag = false; for (int i = 0; i < chars.length; ++i) { char ch = chars[i]; if (ch == '\"') { flag = !flag; continue; } if (ch == ',' && !flag) { set.add(curName.toString()); curName.setLength(0); continue; } curName.append(ch); } set.add(curName.toString()); String name = in.nextLine(); System.out.println(!set.contains(name) ? "Important!" : "Ignore"); } in.close(); } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()){ String s = in.nextLine(); String str = in.nextLine(); func(s,str); } } private static void func(String s, String str) { int count =2;//用来判断该名字是否在 " "之间的 int left = 0;//记录左边 " 下标 int right =0;//记录右边 " 下标 boolean fig =true;//判断 , for (int i = 0; i < s.length(); i++) {//遍历字符串s if(s.charAt(i) == '\"' && count ==2){//出现第一个左边 " left =i+1; count --; continue; } if(count ==2 && fig ==true){ //没有出现 " ,直接判断 s 与 str是否相等 for (int j = 0; j < str.length(); j++) { if(s.charAt(i+j) != str.charAt(j)){ fig =false; break; } } if(fig == true ){//相等 if(i+str.length()-1 == s.length()-1){//判断是否为最后一个名字 System.out.println("Ignore"); return; } if(s.charAt(i+str.length()) ==','){//走到这,不是最后一个名字 ,判断他下一个是否为 , 若是 , 直接结束 System.out.println("Ignore"); return; } } } if(count ==2 && s.charAt(i) ==',' && fig ==false){ //没有出现 " 并却出现 , 让fig为true,执行下一次,下一次为名字的开头 fig =true; continue; } if(s.charAt(i) == '\"' && count ==1){//出现 " 并且 count 为 1,此时找到了 " " 之间的名字 right =i; count --; } if(count ==0){// 判断 " " 之间的名字是否与 str 相等 if(str.equals(s.substring(left,right))){ System.out.println("Ignore"); return; }else{//不相等 count 重置 ,让 i为right 下一次 直接从 right+1 开始判断 count =2; i=right; } } } System.out.println("Important!");//走到这,说明没有与之匹配的名字 } }
import java.util.Scanner; //链接:https://www.nowcoder.com/questionTerminal/286af664b17243deb745f69138f8a800 // 来源:牛客网 // NowCoder每天要处理许多邮件,但他并不是在收件人列表中,有时候只是被抄送。 // 他认为这些抄送的邮件重要性比自己在收件人列表里的邮件低,因此他要过滤掉这些次要的邮件,优先处理重要的邮件。 // 现在给你一串抄送列表,请你判断目标用户是否在抄送列表中。 //输入 // Joe,Kewell,Leon //Joe //"Letendre, Bruce",Joe,"Quan, William" //William //输出: //Ignore //Important public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); while (scanner.hasNext()){ String list= scanner.nextLine(); String name= scanner.nextLine(); StringBuffer stringBuffer=new StringBuffer(); int flag=0; int k=0; int n=list.length(); for (int i = 0; i <list.length(); i++) { if(list.charAt(i)=='"'){ //如果有双引号 则只要不是"就插入 一直找到另一个" 这一对的内容和name进行比较 for (int j = i+1; j <list.length() ; j++) { //i+1是因为i当前为引号+1 从下一个字符开始录入 if(list.charAt(j)!='"'){ //则只要不是"就插入 stringBuffer.append(list.charAt(j)); } if(list.charAt(j)=='"'){ //如果找到另一个"号了 就比较stringBuffer和name的内容 必须完全一致 就输出Ignore k=j+1; //如果找到另一个"号了 就说明这个字符串已经遍历完了 下次从这个" 的下一位开始找 if(stringBuffer.toString().equals(name)){ flag=1; //如果找到完全相同的就标记一下 System.out.println("Ignore"); } stringBuffer.delete(0,stringBuffer.length()); //比较完一次就清空一次stringBuffer break; //找到一对"" 就直接结束 } } } if(k!=0&&(k-1)!=list.length()-1){ //判断之前是否有带""的字符串 如果不为就说明之前遍历了""字符串 那么下次就从k的位置往下找 i=k; //赋值之后变为0 便于下一次的""查找 并且判断当前的k不是我的字符串的末尾 k=0; } if(list.charAt(i)==','){ //使用,分割 如果找到,就说明之前的字符串为一个 对比stringBuffer和name 如果相同输出Ignore if(stringBuffer.toString().equals(name)){ flag=1; System.out.println("Ignore"); } stringBuffer.delete(0,stringBuffer.length()); //比较完清空stringBuffer continue; //结束本次循环 跳过当前找到的, } if(i==list.length()-1){ //因为末尾是没有,结束的 所以判断当前的i是不是末尾 如果是就直接比较 stringBuffer.append(list.charAt(i)); if(stringBuffer.toString().equals(name)){ //比较文件末尾的stringBuffer和name 相同输出Ignore flag=1; System.out.println("Ignore"); } } stringBuffer.append(list.charAt(i)); //加入stringBuffer } if(flag==0){ //如果前面没输出Ignore 则代表没有找到收件人姓名 输出Important! System.out.println("Important!"); } } } }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); while(scan.hasNext()){ String name = scan.nextLine(); int pos = 0; Set<String> s = new HashSet<>(); while(pos < name.length()){ if(name.charAt(pos) == '\"'){ int end = name.indexOf('\"',pos+1); //从pos+1位置往后查找第一个" String tmp = name.substring(pos+1,end); //截取[pos,end)之间的字符串 s.add(tmp); pos = end + 2; //到下一个名字的开头首字符 }else{ int end = name.indexOf(',',pos+1); //已经查到了最后一个名字,不是以,结尾 if(end == -1){ end = name.length()-1; s.add(name.substring(pos,end+1)); break; } String tmp = name.substring(pos,end); s.add(tmp); pos = end + 1; } } name = scan.nextLine(); if(s.contains(name) == true){ System.out.println("Ignore"); }else{ System.out.println("Important!"); } } } }
// write your code here import java.util.*; public class Main{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { String s = sc.nextLine(); String tar = sc.nextLine(); //使用Set存储所有的抄送列表 HashSet<String> set = new HashSet<>(); int i = 0; int n = s.length(); while (i < n) { if ('\"' == s.charAt(i)) { //如果第一个字符是",找到后一个"。将之间的内容加入到Set int end = s.indexOf("\"", i + 1); set.add(s.substring(i + 1, end)); //更新i i = end + 2; } else { //不是",说明是单独的收件人,我们找下一个, int end = s.indexOf(",", i + 1); //如果没找到说明是最后一个收件人 if (end == -1) { set.add(s.substring(i, n)); break; } set.add(s.substring(i, end)); i = end + 1; } } //判断set是否含有 if (set.contains(tar)) { System.out.println("Ignore"); } else { System.out.println("Important!"); } } } }
import java.util.Scanner; import java.util.ArrayList; public class Main{ public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNextLine()) { String str = in.nextLine(); String cur = in.nextLine(); ArrayList list = new ArrayList(); for (int i = 0; i < str.length(); i++) { String ret = ""; char c = str.charAt(i); // 1. 判断是"xxx"的情况 if (c == '"') { i++; while (i < str.length() && str.charAt(i) != '"') { ret += str.charAt(i); i++; } } else if (c == ',') { // 2. 判断是','打头的情况(可分两种) i++; if(str.charAt(i) == '"'){ // 2.1 ','号后面是"xxx"的情况 i++; while (i < str.length() && str.charAt(i) != '"') { ret += str.charAt(i); i++; } }else { // 2.2 ','后面是xxx的情况 while (i < str.length() && str.charAt(i) != ',') { ret += str.charAt(i); i++; } } } else { // 3. 已xxx开头的情况 while (i < str.length() && str.charAt(i) != ',') { ret += str.charAt(i); i++; } } list.add(ret); } if (list.contains(cur)) { System.out.println("Ignore"); } else { System.out.println("Important!"); } } } }
// write your code here import java.util.Scanner; import java.util.WeakHashMap; public class Main { public static void main(String[] args) { Scanner scanner=new Scanner(System.in); while (scanner.hasNext()){ String s1=scanner.nextLine(); String s2=scanner.nextLine(); if (s1.contains("\"")){ StringBuilder sb=new StringBuilder(); int flg=0; for (int i = 0; i < s1.length(); i++) { if (s1.charAt(i)=='\"'){ flg++; }else if (flg%2==0 && s1.charAt(i)==','){ sb.append("#");//分割名字与名字的标志位 }else { sb.append(s1.charAt(i)); } } s1=sb.toString(); String[] nameList=s1.split("#"); int i = 0; for (; i < nameList.length; i++) { if (nameList[i].equals(s2)){ System.out.println("Ignore"); break; } } if (i== nameList.length){ System.out.println("Important!"); } }else { String[] nameList=s1.split(","); int i=0; for (;i< nameList.length;i++){ if (nameList[i].equals(s2)){ System.out.println("Ignore"); break; } } if (i== nameList.length){ System.out.println("Important!"); } } } } }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String str = sc.nextLine(); String target = sc.nextLine(); char[] ch = str.toCharArray(); int flg = 0; List<String> list = new ArrayList<>(); String ret = ""; for(int i = 0;i < ch.length;i++){ if(flg == 0 && ch[i] == '"'){ flg = 1; list.add(ret); ret = ""; }else if(flg == 1 && ch[i] == '"'){ flg = 0; list.add(ret); ret = ""; } else if(flg == 1){ ret += ch[i]; }else if(flg == 0 && ch[i] != ','){ ret += ch[i]; } } list.add(ret); boolean temp = false; for(String ss : list){ if(ss.equals(target)){ temp = true; break; } } if(temp){ System.out.println("Ignore"); }else{ System.out.println("Important!"); } } } }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String s = sc.nextLine(); String n = sc.nextLine(); int ln = s.length(); if(ln == 1){ if(n.equals(s)){ System.out.println("Ignore"); }else{ System.out.println("Important!"); } continue; } int i = 0; out:while(i < ln){ int j = i + 1; if(s.charAt(i) != '"'){ for(;j < ln;j++){ if(s.charAt(j) == ','){ if(n.equals(s.substring(i,j))){ System.out.println("Ignore"); break out; }else{ i = j + 1; break; } } } }else{ i++; for(;j < ln;j++){ if(s.charAt(j) == '"'){ if(n.equals(s.substring(i,j))){ System.out.println("Ignore"); break out; }else{ i = j + 2; break; } } } } if(j == ln){ if(s.charAt(j-1) == '"'){ if(n.equals(s.substring(i,j-1))){ System.out.println("Ignore"); }else{ System.out.println("Important!"); } break; } if(n.equals(s.substring(i,j))){ System.out.println("Ignore"); }else{ System.out.println("Important!"); } break; } } if(i >= ln){ System.out.println("Important!"); } } } }
// write your code here cpp #include <iostream> #include <vector> #include <set> #include <string> using namespace std; int main(){ string nameStr; string findStr; while(getline(cin,nameStr)&&getline(cin,findStr)){ //思路:将namestr中的名字都划分开来,存入set中。 set<string> table; int head = 0; int tail = 0; while(head < nameStr.size() && tail < nameStr.size()){ //1.当名字以“开头时,tail去找“ if(nameStr[head] == '\"'){ ++tail; while(tail < nameStr.size() && nameStr[tail] != '\"'){ ++tail; } table.insert(string(nameStr.begin()+head+1,nameStr.begin()+tail)); head = tail + 2; tail = head + 1; } //2.当名字不以“开头时,tail找, else{ while(tail < nameStr.size() && nameStr[tail] != ','){ ++tail; } table.insert(string(nameStr.begin()+head,nameStr.begin()+tail)); head = tail + 1; tail = head + 1; } } if(table.find(findStr)!=table.end()){ cout<<"Ignore"<<endl; } else{ cout<<"Important!"<<endl; } } return 0; }
// 将s1利用队列进行切分 然后存入到set中,之后在set中查找s2即可 #include<iostream> #include<queue> #include<string> #include<set> using namespace std; string& getstring(queue<char>& q, string &s) { s.resize(0); while (!q.empty()) { s += q.front(); q.pop(); } return s; } int main() { string s1; string s2; while (getline(cin, s1)) { getline(cin, s2); queue<char> q; bool sign = 0; string tmp = ""; set<string> s; for (int i = 0; i < s1.size(); i++) { if (s1[i] == '"') { while (1 && i < s1.size()) { i++; if (s1[i] != '"') { q.push(s1[i]); } if (s1[i] == '"') { break; } } s.insert(getstring(q, tmp)); i++; } else { if (s1[i] == ',') i++; while (s1[i] != ',' && i < s1.size()) { q.push(s1[i]); i++; } s.insert(getstring(q, tmp)); } } if (s.count(s2)) cout << "Ignore" << endl; else { cout << "Important!" << endl; } } return 0; }
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main() { string str1, str2; while (getline(cin, str1)) { getline(cin, str2); vector<string> v; int len1 = str1.size(); int len2 = str2.size(); for (int i = 0; i < len1; i++) { //有双引号是不用讨论单词是否为最后一个 //因为双引号成对出现,一定能find到下标 if (str1[i] == '\"' && i + 1 < len1) { i++; int idx = str1.find('\"', i); v.push_back(str1.substr(i, idx - i)); i = idx + 1; } else { int idx = str1.find(',', i); //没有双引号要判断单词是否为最后一个 //因为最后一个单词的末尾没有逗号 //找不到会返回-1 if (idx == string::npos) v.push_back(str1.substr(i, len1 - i)); else { v.push_back(str1.substr(i, idx - i)); i = idx; } } } cout << ((find(v.begin(), v.end(), str2) != v.end()) ? "Ignore" : "Important!") << endl; } return 0; }
#include<iostream> #include<vector> #include<algorithm> #include<string> using namespace std; int main() { string str; string comp; while (getline(cin, str)) { vector<string> vs; getline(cin, comp); int i = 0, j = 0; int flag = 0; string temp; for (int i = 0; i < str.size(); i++) { //flag = 1:在引号里面 //flag = 0;在引号外面 if (str[i] == '"'&& flag == 0) { flag = 1; } else if (str[i] == '"'&& flag == 1) { flag = 0; } else if (flag == 1) { temp.push_back(str[i]); } else if (flag == 0 && str[i] != ',') { temp.push_back(str[i]); } else if (flag == 0 && str[i] == ',') { vs.push_back(temp); temp.clear(); } } vs.push_back(temp); temp.clear(); flag = 0; for (auto e : vs) { if (e == comp) flag = 1; } if(flag == 1) cout << "Ignore" << endl; else cout << "Important!" << endl; flag = 0; } }