小李的QQ列表里有很多联系人,他修改了所有人的备注姓名。其中有些联系人名字的前部或后部被加了诸如"好妹妹"的字样。请你打印出小李的所有的女性"好妹妹"。打印时请按照联系人原始名字升序排列,如果两人名字相同则年龄小的排在前面;如果两人年龄相同,则较早成为好友的排在前面。题目保证好妹妹标志不会同时出现在前缀和后缀,同一天里也不会添加名字相同并且年龄相同的"好妹妹"。
输入格式:
第一行给出标识好妹妹标志的字符串,该字符串内不包含空格,最大长度为6并且不区分大小写。第二行给出QQ列表的所有联系人个数n (1≤ n ≤105),随后n行列出所有联系人信息,每行信息格式如下:
备注姓名 性别 年龄 结交好友日期
其中备注姓名不超过30个字符;性别用字符表示,F表示女性,M代表男性;结交好友日期采用诸如"2001.01.01"的格式表示。
输出格式:
第一行输出好妹妹的数目k,随后k行打印出去掉好妹妹标志的名字、年龄以及结交好友日期。
输入样例:
例如:
hmm
10
Zoehmm F 28 2001.01.01
hmmBeith F 18 2010.10.21
Zack M 35 1999.09.18
hmmAdam F 21 2010.10.21
Beithhmm F 21 2010.10.21
Chelse F 45 2005.12.03
DaisyHMM F 30 2008.08.05
Eston M 18 2015.03.04
hmmFrany F 8 2018.07.15
JackHM F 7 2017.09.11
输出样例:
输出:
6
Adam 21 2010.10.21
Beith 18 2010.10.21
Beith 21 2010.10.21
Daisy 30 2008.08.05
Frany 8 2018.07.15
Zoe 28 2001.01.01
实现代码
logo=input().strip().lower() #去除首尾空格,并将输入的字符串全部小写
n=int(input())
d=[]
# 处理数据,存储含有logo的列表
for i in range(n):
a=input().split()
if(a[1]=='F'): #存储女性信息
#判断logo是否存在名字里面
if(logo in a[0].lower() and len(a[0])>len(logo)):
index=a[0].lower().index(logo) #找到logo第一次出现的下标
if(index==0): #下标为0,说明在前面出现
a[0]=a[0][3:]
else: #说明在尾出现
a[0]=a[0][:-3]
a.remove(a[1]) #移除性别信息
d.append(a)
else:
continue
print(len(d))
d.sort(key=lambda x:(x[0],x[1],x[2])) #按照名字,再按年龄,再按加好友时间排序
for i in d:
print(*i)
需要注意的是去除“hmm”标志的判断,标志可能在首尾出现,但是在中间也有可能出现。
关键排序按照先名字,后年龄,最后时间