如何根据一段单词,找出其中的最长单词
嗨嗨, 我是小圆。
今天给大家分享一个练习题 :在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 ""
如何根据一段单词,找出其中的最长单词相关推荐
- Python练习题:根据一段单词,找出其中的最长单词
题目 给定一组单词words,请找出其中的最长单词,该最长单词是由words中其他单词逐步添加一个字母组成.若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的结果,则返回空字符串. 例 ...
- DHU数据结构-顺序表- ADT应用-找出两个等长升序序列的中位数
目录 1.题目 2.题解 3.代码实现 1.题目 顺序表ADT模板简单应用算法设计:找出两个等长升序序列的中位数 作者: 教材 时间限制: 1S 章节: DS:线性表 问题描述 : 目的:使用自行设计 ...
- 给定一个字符串s,找出s中最长的回文子串,你可以假设s的最大长度是1000。
找出一个字符串中最大的回文字符串 思路:从第一个字符串开始,一次向左向右判断,如果相同就继续向左向右直到不相同或者越界为止,并判断最大长度,依次更新最大长度值,并记录最大长度值的开始为止.示例代码如下 ...
- python找出列表中最长/短的字符串及他们的长度、下标
列表中包含多个字符串,当需要找出最长/短字符串的长度.最长/短字符串或者他们的下标时,此代码都能搞定!欢迎 star ^ ^ 代码如下: strs = ["flower", & ...
- JS 找出字符串中最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...
- 找出数组中最长的连续数字序列(JavaScript实现)
原始题目: 给定一个无序的整数序列, 找最长的连续数字序列. 例如: 给定[100, 4, 200, 1, 3, 2], 最长的连续数字序列是[1, 2, 3, 4]. 小菜给出的解法: 1 func ...
- 利用c语言找出输入文本最长的一行
前言 来源之<c编程语言>练习1-16 代码 #include<stdio.h> #define MAXLINE 1000int getline(char line[], in ...
- 找出最长单词(C语言)(指针实现)
输入一行文字,找出其中的最长单词并输出. 要求: a)用指针实现. b)字符串若有多个最长单词,输出第一个. c)字符串长度不超过100个字符. d)规定连续的字母(大小写都行)构成的字符串为单词,字 ...
- leetcode - 最长单词
题目 给定一组单词words,编写一个程序,找出其中的最长单词,且该单词由这组单词中的其他单词组合而成.若有多个长度相同的结果,返回其中字典序最小的一项,若没有符合要求的单词则返回空字符串. 示例: ...
最新文章
- 满城尽带比特币:程序员如何发布自己的 ICO?
- 2019牛客暑期多校训练营(第一场) - B - Integration - 数学
- 陶哲轩的10岁与30岁
- linux下的驱动大小,(转)Linux驱动开发需要注意的点/KO大小/内存管理
- springsecurity中session失效后怎样处理_结合Spring Security进行web应用会话安全管理
- emq数据储存到mysql,规则引擎示例 - 保存数据到 MySQL - 《EMQ X Enterprise v4.0 中文文档》 - 书栈网 · BookStack...
- jmeter导出测试报告
- Atitit 提升效率 声明式编程 约束式编程 目录 1. 。 在约束编程中,问题被视为对可能是有效解决方案的一系列限制。	1 2. 常见的约束式编程	2 2.1. 数据库约束 注解	2 2.2.
- 人工智能时代的危机_AI信任危机:如何前进
- 填坑唯品会分布式调度Saturn
- snipaste截长图
- 《图解数据结构》.pdf
- AJAXSUBMIT跨域问题
- BIGEMAP如何下载高程卫星地图
- 分形植物的c语言源代码,C语言源代码实例.rar
- 量子研究再获突破能否成功解决核潜艇通信难题?
- 仿微信朋友圈点击评论自动定位到对应位置
- 【校园网故障】HTTP ERROP 502和DNS PROBE STARTED、DNS Probe Finished No Internet的解决方法
- http中url特殊字符转义及解决方法
- 华为防火墙telnet配置