嗨嗨, 我是小圆。
今天给大家分享一个练习题 :在python中,如何根据一段单词,找出其中的最长单词

题目

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

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 ""

如何根据一段单词,找出其中的最长单词相关推荐

  1. Python练习题:根据一段单词,找出其中的最长单词

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

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

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

  3. 给定一个字符串s,找出s中最长的回文子串,你可以假设s的最大长度是1000。

    找出一个字符串中最大的回文字符串 思路:从第一个字符串开始,一次向左向右判断,如果相同就继续向左向右直到不相同或者越界为止,并判断最大长度,依次更新最大长度值,并记录最大长度值的开始为止.示例代码如下 ...

  4. python找出列表中最长/短的字符串及他们的长度、下标

      列表中包含多个字符串,当需要找出最长/短字符串的长度.最长/短字符串或者他们的下标时,此代码都能搞定!欢迎 star ^ ^ 代码如下: strs = ["flower", & ...

  5. JS 找出字符串中最长回文子串

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...

  6. 找出数组中最长的连续数字序列(JavaScript实现)

    原始题目: 给定一个无序的整数序列, 找最长的连续数字序列. 例如: 给定[100, 4, 200, 1, 3, 2], 最长的连续数字序列是[1, 2, 3, 4]. 小菜给出的解法: 1 func ...

  7. 利用c语言找出输入文本最长的一行

    前言 来源之<c编程语言>练习1-16 代码 #include<stdio.h> #define MAXLINE 1000int getline(char line[], in ...

  8. 找出最长单词(C语言)(指针实现)

    输入一行文字,找出其中的最长单词并输出. 要求: a)用指针实现. b)字符串若有多个最长单词,输出第一个. c)字符串长度不超过100个字符. d)规定连续的字母(大小写都行)构成的字符串为单词,字 ...

  9. leetcode - 最长单词

    题目 给定一组单词words,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成.若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则返回空字符串. 示例: ...

最新文章

  1. 满城尽带比特币:程序员如何发布自己的 ICO?
  2. 2019牛客暑期多校训练营(第一场) - B - Integration - 数学
  3. 陶哲轩的10岁与30岁
  4. linux下的驱动大小,(转)Linux驱动开发需要注意的点/KO大小/内存管理
  5. springsecurity中session失效后怎样处理_结合Spring Security进行web应用会话安全管理
  6. emq数据储存到mysql,规则引擎示例 - 保存数据到 MySQL - 《EMQ X Enterprise v4.0 中文文档》 - 书栈网 · BookStack...
  7. jmeter导出测试报告
  8. Atitit 提升效率 声明式编程 约束式编程 目录 1. 。 在约束编程中,问题被视为对可能是有效解决方案的一系列限制。 1 2. 常见的约束式编程 2 2.1. 数据库约束 注解 2 2.2.
  9. 人工智能时代的危机_AI信任危机:如何前进
  10. 填坑唯品会分布式调度Saturn
  11. snipaste截长图
  12. 《图解数据结构》.pdf
  13. AJAXSUBMIT跨域问题
  14. BIGEMAP如何下载高程卫星地图
  15. 分形植物的c语言源代码,C语言源代码实例.rar
  16. 量子研究再获突破能否成功解决核潜艇通信难题?
  17. 仿微信朋友圈点击评论自动定位到对应位置
  18. 【校园网故障】HTTP ERROP 502和DNS PROBE STARTED、DNS Probe Finished No Internet的解决方法
  19. http中url特殊字符转义及解决方法
  20. 华为防火墙telnet配置

热门文章

  1. 甲由科技带你了解物联网App开发3大应用领域
  2. RocketMQ的消息幂等
  3. Tri-State作为输入的简单应用
  4. 微软打印机驱动服务器,打印机驱动或成历史 云打印还看微软
  5. 【光纤通信】光纤光栅传感网接入GPON的matlab仿真
  6. JLX256160 iic 带字库
  7. 【Python公开课】零基础玩转Python:Python中的文件操作
  8. 一个优秀的系统集成工程师
  9. 32g内存 android开发,堪比台式电脑,手机真的需要用到16G内存,32G内存何时能到来?...
  10. 使用电脑小贴士:电脑使用的几个基本技巧