ali算法笔试编程题

 

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)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值