美文网首页
Python编程题38--最长单词

Python编程题38--最长单词

作者: wintests | 来源:发表于2021-12-18 14:41 被阅读0次

题目

给定一组单词words,请找出其中的最长单词,该最长单词是由words中其他单词逐步添加一个字母组成。若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的结果,则返回空字符串。

例如:

给定一个words:["a", "banana", "app", "appl", "ap", "apply", "apple"]
返回结果:"apple"

解释:"apply"和"apple"都是由words中的单词组成,但"apple"的字典序小于"apply"

给定一个words:["w","ow","wor","b", "owb"]
返回结果:"b"

解释:这里words中没有符合条件逐步组成的最长单词,所以单个字母就是最终结果,但"w"的字典序小于"b"

说明

  1. words中所有单词都只包含小写字母。
  2. words中所有单词长度均大于0,且至少存在1个长度仅为1的单词或字母。
  3. 最长单词必须是从一个字母开始,在其单词尾部逐步添加一个字母而得到的结果。

实现思路1

  • 定义 max_length 表示最长单词的长度,其默认值为0;定义一个列表 res_list,用于存储长度等于 max_length 的所有单词
  • 遍历 words ,得到所有单词 word ,并设置一个标记flag,默认值为True,用于判断 word 是否是能够完全由其他单词组成
  • 每次需对当前遍历的单词word进行判断,如果word并不能完全由其他单词组成,那么处理 flag = False,同时结束对当前word的遍历
  • 每次对当前遍历的单词word进行判断后,如果 flag = True,那么说明 word 是能够完全由其他单词组成,同时需判断当前word的长度是否大于等于 max_length ,如果是那么需要更新 max_length ,并把当前word添加到 res_list
  • 因为 res_list 中可能存在多个最长的单词,所以需对其进行比较,可对其进行 sort排序 (字符串排序默认按ASCII的大小比较),排序后即可找到其字典序最小的一项

代码实现1

def longestWord(words):
    res_list = []
    max_length = 0
    words_set = set(words)
    for word in words:
        flag = True  # 用于标记 word 是否是能够完全由其他单词组成
        for i in range(len(word)):
            tmp = word[:i + 1]
            if tmp not in words_set:  # set查找时间复杂度O(1),如果tmp不在words_set中,直接结束当前word的遍历
                flag = False
                break
        # 如果当前word遍历后 flag = True,则说明当前word是能够完全由words中其他单词组成而来
        if flag and max_length <= len(word):
            max_length = len(word)
            res_list.append(word)
    # 可能存在多个最长的单词,先找到所有最长的单词,再sort排序(字符串排序默认按ASCII的大小比较),排序后的第一个元素就是字典序最小的单词
    res_list = [i for i in res_list if len(i) == max_length]
    res_list.sort()
    return res_list[0] if res_list else ""

实现思路2

  • 首先对words进行多次排序,第一次按字典序来排序,第二次按单词长度来排序,排序后得到的words顺序是 先按单词长度降序,再按字典序从小到大
  • 遍历 words ,得到所有单词 word ,并设置一个标记flag,默认值为True,用于判断 word 是否是能够完全由其他单词组成
  • 每次需对当前遍历的单词word进行判断,如果word并不能完全由其他单词组成,那么处理 flag = False,同时结束对当前word的遍历
  • 每次对当前遍历的单词word进行判断后,如果 flag = True,那么说明 word 是能够完全由其他单词组成,此时的 word 就是所求的最长单词

代码实现2

def longestWord(words):
    words.sort()  # 多次排序,第一次找字典序最小的,第二次找长度最大的(reverse=True,降序)
    words.sort(key=len, reverse=True)
    words_set = set(words)
    for word in words:
        flag = True
        for i in range(len(words)):
            tmp = word[:i+1]
            if tmp not in words_set:  # set查找时间复杂度O(1),如果tmp不在words_set中,直接结束循环
                flag = False
                break
        if flag:
            return word
    return ""

更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)

相关文章

  • Python编程题38--最长单词

    题目 给定一组单词words,请找出其中的最长单词,该最长单词是由words中其他单词逐步添加一个字母组成。若有多...

  • C语言编程 C Language Programming - 0

    编程题0006 (from Programming Teaching Assistant (PTA)) 最长对称子...

  • C语言编程 C Language Programming - 0

    编程题0003 (from Programming Teaching Assistant (PTA)) 计算最长的...

  • 第五周学习计划

    本周学习python相关内容,练习sql题,练习python编程题,尽量跟进度Õ_Õ

  • [编程题] 循环单词

    如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。 例如:picture 和 turepic 就...

  • Python编程题汇总(持续更新中……)

    下列为一些常见的Python编程题,主要用于学习和巩固所学知识。 Python编程题1---九九乘法表[https...

  • 第五周学习总结

    本周已看了python基础知识的相关视频和PDF,练习了几道编程题,做编程题很没思路。

  • 《最长回文子串》

    python算法题之《最长回文子串》 题目要求 代码及解析 结果

  • FCC刷题

    今天在FCC上刷题,碰到一个考验JS数组转换函数的题,j觉得挺有意思。 需求: 找出最长单词 在句子中找出最长的单...

  • python编程题

    1、台阶问题、斐波那契 一只青蛙可以跳上一级台阶,也可以跳上两级台阶,求青蛙跳上一个n级台阶共有多少种跳法 方法一...

网友评论

      本文标题:Python编程题38--最长单词

      本文链接:https://www.haomeiwen.com/subject/znjraltx.html