算法题 - 最短前缀问题 - Python

问题描述:

给定一组英文单词(不重复),输出每个单词的最短前缀最短前缀是指,这个前缀在这个单词出现,而且是最短的。
示例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)

欢迎批评指正。

猜你喜欢

转载自blog.csdn.net/XX_123_1_RJ/article/details/81988887