题目

给定一组单词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"

说明:

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

实现思路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 = 0words_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 = Falsebreak# 如果当前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

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
def longestWord(words):words.sort()  # 多次排序,第一次找字典序最小的,第二次找长度最大的(reverse=True,降序)words.sort(key=len, reverse=True)words_set = set(words)for word in words:flag = Truefor i in range(len(words)):tmp = word[:i+1]if tmp not in words_set:  # set查找时间复杂度O(1),如果tmp不在words_set中,直接结束循环flag = Falsebreakif flag:return wordreturn ""

Python练习题:根据一段单词,找出其中的最长单词相关推荐

  1. 如何根据一段单词,找出其中的最长单词

    嗨嗨, 我是小圆. 今天给大家分享一个练习题 :在python中,如何根据一段单词,找出其中的最长单词 题目 给定一组单词words,请找出其中的最长单词,该最长单词是由words中其他单词逐步添加一 ...

  2. python按行读字符串,python按行读取文件并找出其中指定字符串

    python怎么提取出文件里的指定内容 python读取文件内容的方法: 一.最方便的方法是一次性读取文件中的所有内容并放置到一个大字符串中: all_the_text = open('thefile ...

  3. python实现从一组颜色中找出与给定颜色最接近颜色的方法

    本文实例讲述了python实现从一组颜色中找出与给定颜色最接近颜色的方法.分享给大家供大家参考.具体分析如下: 这段代码非常有用,可以找到指定颜色相似的颜色,比如有一组8个颜色,现在给定一个rgb格式 ...

  4. DHU数据结构-顺序表- ADT应用-找出两个等长升序序列的中位数

    目录 1.题目 2.题解 3.代码实现 1.题目 顺序表ADT模板简单应用算法设计:找出两个等长升序序列的中位数 作者: 教材 时间限制: 1S 章节: DS:线性表 问题描述 : 目的:使用自行设计 ...

  5. python将大于输出列表_python找出列表中大于某个阈值的数据段示例

    该算法实现对列表中大于某个阈值(比如level=5)的连续数据段的提取,具体效果如下: 找出list里面大于5的连续数据段: list = [1,2,3,4,2,3,4,5,6,7,4,6,7,8,5 ...

  6. python批量删除微信好友_Python找出微信上删除你好友的人脚本写法

    原标题:Python找出微信上删除你好友的人脚本写法 相信大家在微信上一定被上面的这段话刷过屏,群发消息应该算是微信上流传最广的找到删除好友的方法了.但群发消息不仅仅会把通讯录里面所有的好友骚扰一遍, ...

  7. python列表查找整数_Python:找出整数列表是否为coheren

    我试图找出一个整数列表是一致的还是"一次延伸",这意味着两个相邻元素之间的差必须正好是一,并且数字必须单调地递增.我found一种简单的方法,我们可以根据列表中的数字减去元素在列表 ...

  8. python取出字典中最大值_python找出字典中value最大值的几种方法

    假设定义一字典,m = {"a":3,"e":6,"b":2,"g":7,"f":7,"c ...

  9. python两个数组合并、找出中位数_leetcode刷题记录-找出这两个有序数组的中位数(python版本)...

    谨以此文记录一下自己刷题的过程,虽然技术能力一般,相信刷完整套题目自己的编程能力定会有提高,代码都是个人创作,不一定是最好的,仅供参考和交流 给定两个大小为 m 和 n 的有序数组 nums1 和 n ...

最新文章

  1. 人工智能-离散数学-消解原理
  2. android小程序备忘录,撸一个会话备忘录的小程序
  3. SharePoint 2013 InfoPath 无法保存下列表单
  4. Web Worker javascript多线程编程(一)
  5. java参数传入的是一个类名_Java编程细节——泛型的定义(类、接口、对象)、使用、继承...
  6. 驳《阿里「Java开发手册」中的1个bug》?
  7. .NET Web实时消息后台服务器推送技术-GoEasy
  8. SVN客户端安装及汉化
  9. 计量芯片HLW8032在充电桩设备中的典型应用
  10. CRC16-Modbus—MATLAB
  11. macOS 曝可获取用户密码的 0day 漏洞;Fedora logo 改版三个候选方案
  12. 官方文档-Linux服务器集群系统(一)
  13. 升级鸿蒙系统好不好用,昨天随手发了一个有关升级鸿蒙系统后的使用体会,没料到引发这么大的讨论。看来大家对这个话题关注度很高。作为一个普通消费者,... - 雪球...
  14. Python生成标签云/词云
  15. 侍魂无限跳服务器,经典游戏《真侍魂》橘右京的无限残像,对手就这么活活的被挡死了...
  16. FFmpeg源代码简单分析-编码-av_write_trailer()
  17. 二进制与8,10,16转换
  18. 学习笔记:UDP实现进程心跳检测
  19. 网络互联复习(二) 精简版
  20. matlab中左移右移如何表示,汇编语言SHLD(双精度左移)和SHRD(双精度右移)指令...

热门文章

  1. 复古儿童卡通温馨手绘风格趣味MOGRT图形动画标题pr模板
  2. java实现远程控制
  3. android studio评论功能,Android Studio 使用技巧
  4. arch-yaourt安装
  5. PingCAP 完成 D 轮 2.7 亿美元融资,创造全球数据库历史新的里程碑
  6. 解决Iframe嵌入帆软BI系统后,Chrome升级后跨域出现登录界面,Cookie写入不成功。
  7. java 版本区别,java SE是什么,下载JDK时各个名称的含义
  8. 用python做一个表白软件手机版_用python写一个5.20的表白小程序吧
  9. 蓝桥杯国赛2017瓷砖样式
  10. 一篇文章带你读懂批处理命令