2018年9月7号
思路:首先进行数据的预处理部分,将歌手、歌曲、演员分别分离出来保存到列表aalist里面。再进行一次排序,排序可以保证先匹配“周杰伦”,当不能匹配时再去匹配“周杰”,如此可以将二者分开。之后便可以进行字符串匹配,并做插入字符操作。
输入为:
singer_周杰|周杰伦|刘德华|王力宏;song_冰雨|北京欢迎你|七里香;actor_周杰伦|孙俪
请播放周杰伦的七里香给我听
输出为:
请播放 周杰伦/acter,singer 的 七里香/song 给我听
代码如下:
a = raw_input()
b = raw_input()
#a = "singer_周杰|周杰伦|刘德华|王力宏;song_冰雨|北京欢迎你|七里香;actor_周杰伦|孙俪"
#b = "请播放周杰伦的七里香给我听"
alist = []
i = 0
j = 0
while i < len(a):#将歌手、歌曲、演员分别分离出来保存到alist里面。
if a[i] == ';':
alist.append(a[j:i])
j = i+1
i = i + 1
alist.append(a[j:])
alist[0] = alist[0].replace('singer_','')#歌手
alist[1] = alist[1].replace('song_','')#歌曲
alist[2] = alist[2].replace('actor_','')#演员
#print(alist)
aalist=[]
for c in alist:
#print(c)
ssa = []
i = j = 0
while i < len(c):
if c[i] == '|':
ssa.append(c[j:i])
j = i + 1
i = i + 1
ssa.append(c[j:])
aalist.append(ssa)
print(aalist)
#myList1 = sorted(myList,key = lambda i:len(i),reverse=True)
aalist[0] = sorted(aalist[0],key=lambda i:len(i),reverse=True)#排序可以保证先匹配“周杰伦”,当不能匹配时再去匹配“周杰”,如此可以将二者分开。
#print(aalist)
i = 0
#count = 0
while i <len(b):#字符串匹配
count = 0
for j in aalist[0]:
#print(j)
if b[i] == j[0]:
#print('b[i]'+b[i])
if b[i:i+len(j)] == j:
if j in aalist[2]:
b = b.replace(j, ' ' +j + '/acter,singer ')
i = i + len(j)
else:
b = b.replace(j,' ' +j+'/singer ')
i = i + len(j) - 1
for j in aalist[1]:
if b[i] == j[0]:
if b[i:i+len(j)] == j:
b = b.replace(j,' ' +j+'/song ')#符合条件进行替换
i = i + len(j)-1
i = i+1#while增益
print(b)