2019阿里校招第一题9月7号
KMP ababcabcabd和abcabd匹配次数
1-1000不能被2、3、5整除的个数
编程题一
只需开口说话就能控制计算机做自己想做的事情,这种新奇的人机交互方式已经从科幻小说进入了现实世界。那么机器是如何理解人说的话的呢?这是一个复杂的过程,其中一个重要的任务就是要教会机器理解话语中的重点,即关键词。比如对机器说“请播放周杰伦的青花瓷”,机器要能理解 “周杰伦”是一个歌手,而“青花瓷”是一首歌曲。而我们知道,“周杰”也是一个歌手,那机器如何抉择呢?为了简化问题,我们使用从左到右的最大长度匹配的原则:在本句里面,“周杰”的字符串长度比“周杰伦”小,所以识别“周杰伦“作为歌手。 通过互联网,我们能收集到一个庞大的知识库,帮助我们教机器来做这件事情。知识库中有所有的歌曲的列表,所有的歌手的列表,以及其他各种实体的列表。那么怎么使用这些实体通过上面的规则来教会机器识别关键词呢?
输入:
singer_周杰|周杰伦|刘德华|王力宏;song_冰雨|北京欢迎你|七里香;actor_周杰伦|孙俪
请播放周杰伦的七里香给我听
输出:
请播放 周杰伦/actor,singer 的 七里香/song 给我听
def main():
S1= raw_input()
S2 = raw_input()
dic = {}
for sen in S1.split(';'):
Class, name = sen.split('_')
dic.setdefault(Class,[])
for k in name.split('|'):
dic[Class].append(k)
k = 0
res = ''
while k<len(S2):
rel = ''
clas = []
for Class, val in dic.items():
for i in val:
l = len(i)
if S2[k:k+l]==i:
if len(rel)<l:
rel = i
clas = [Class]
elif len(rel)==l and rel==i:
clas.append(Class)
if not rel:
res += S2[k]
k += 1
else:
clas.sort()
k += len(rel)
res = res+ ' '+rel+r'/'+','.join(clas)+' '
print res.strip(' ')
if __name__=='__main__':
main()