问题描述:
给定一组英文单词(不重复),输出每个单词的最短前缀
,最短前缀
是指,这个前缀只
在这个单词出现,而且是最短
的。
示例1:
输入:[‘abc’, ‘a’, ‘abve’]
解释:’abc’,的最短唯一前缀是,’abc’,因为不能是’a’、’ab’,这两个前缀在其他字符串均有出现。
问题分析:
(1)对所有单词进行排序,排序后,拥有公共前缀的字符串会紧邻相挨。
(2)取出其中的一个单词,获取左右相邻的两个单词与本身的公共前缀。
(3)两个公共前缀,最长的那个公共前缀,的长度,加上 1,就是本身单词的,最短唯一前缀。
(4)题目倒是不难,但是感觉这题目很实用哦。
Python3实现:
# 同学的 yuan fu dao 算法面试题目
# @Time :2018/08/23
# @Author :LiuYinxing
import os
def tmp(words):
words.sort() # 先排序
n, res = len(words), []
lift, right = 0, 0
for i, v in enumerate(words):
if i+1 < n:
right = len(os.path.commonprefix([v, words[i+1]])) # 公共前缀的长度
l = max(lift, right)
res.append([v, v[0:l+1]]) # 添加
lift, right = right, 0
return res
if __name__ == '__main__':
words = ['car', 'cal', 'dds', 'sscda', 'card', 'ca', 'abc', 'abcd']
# words = ['car']
res = tmp(words)
for v in res:
print(v)
欢迎批评指正。