题目

给你一个字符串 s 和一个字符串数组 words ,请你判断 s 是否为 words 的 前缀字符串 。
字符串 s 要成为 words 的 前缀字符串 ,需要满足:s 可以由 words 中的前 k(k 为 正数 )个字符串按顺序相连得到,且 k 不超过 words.length 。
如果 s 是 words 的 前缀字符串 ,返回 true ;否则,返回 false 。
示例 1:
输入:s = “iloveleetcode”, words = [“i”,“love”,“leetcode”,“apples”]
输出:true
解释:
s 可以由 “i”、“love” 和 “leetcode” 相连得到。
示例 2:
输入:s = “iloveleetcode”, words = [“apples”,“i”,“love”,“leetcode”]
输出:false
解释:
数组的前缀相连无法得到 s 。
提示:
1 <= words.length <= 100
1 <= words[i].length <= 20
1 <= s.length <= 1000
words[i] 和 s 仅由小写英文字母组成
来源:力扣(LeetCode)

解题思路

  这个题想要匹配的前提是words里所有的字符数量必须大于s,另外,s中的字符在逐个与words中的字符匹配的时候,s匹配结束时,不能只匹配到words里某个元素的一半,必须正好将words里整个单词匹配完才能算作匹配成功。

class Solution:def isPrefixString(self, s: str, words: List[str]) -> bool:temp=[len(words[0])]  #存储完整单词累计长度for i in words[1:]:temp.append(len(i)+temp[-1])S=''.join(words)  #将words链接成句子if len(s)>len(S):  #如果words里所有的字符数量小于s那么不会匹配成功return Falsefor i in range(len(s)): if s[i]!=S[i]:return Falsereturn True if i+1 in set(temp) else False #如果正好以一个完整的单词匹配完那么就算匹配成功

  当然也可以逐个字符去检查,这样也可以避免计算完整单词。

class Solution:def isPrefixString(self, s: str, words: List[str]) -> bool:A=iter(s)i=0B=iter(words[i])flag=0  #中断标记while True:try:s1=next(A)except:flag=0breaktry:s2=next(B)except:i+=1if i==len(words):flag=1breakB=iter(words[i])s2=next(B)if s1!=s2:return Falseif flag: #words里的字符不够用return Falseelse:try:  #words里的某个单词没匹配完全next(B)return Falseexcept:return True

LeetCode简单题之检查字符串是否为数组前缀相关推荐

  1. LeetCode简单题之检查两个字符串数组是否相等

    题目 给你两个字符串数组 word1 和 word2 .如果两个数组表示的字符串相同,返回 true :否则,返回 false . 数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串. ...

  2. LeetCode简单题之反转字符串

    题目 编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 s 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的额外空间解决这一问题. 示例 1: ...

  3. LeetCode简单题之检查是否所有字符出现次数相同

    题目 给你一个字符串 s ,如果 s 是一个 好 字符串,请你返回 true ,否则请返回 false . 如果 s 中出现过的 所有 字符的出现次数 相同 ,那么我们称字符串 s 是 好 字符串. ...

  4. LeetCode简单题之判断字符串的两半是否相似

    题目 给你一个偶数长度的字符串 s .将其拆分成长度相同的两半,前一半为 a ,后一半为 b . 两个字符串 相似 的前提是它们都含有相同数目的元音('a','e','i','o','u','A',' ...

  5. 1961-Check If String Is a Prefix of Array(检查字符串是否为数组前缀)

    这个系列算是出于个人兴趣开的一个新坑吧,最近看到同学刷LeetCode算法题,就想写写那些可以一行Python代码写出来的题目,因此本专栏的文章的解题方式效率不做保证,只为追求"一行的浪漫& ...

  6. LeetCode简单题之检查句子中的数字是否递增

    题目 句子是由若干 token 组成的一个列表,token 间用 单个 空格分隔,句子没有前导或尾随空格.每个 token 要么是一个由数字 0-9 组成的不含前导零的 正整数 ,要么是一个由小写英文 ...

  7. LeetCode简单题之旋转字符串

    题目 给定两个字符串, A 和 B. A 的旋转操作就是将 A 最左边的字符移动到最右边. 例如, 若 A = 'abcde',在移动一次之后结果就是'bcdea' .如果在若干次旋转操作之后,A 能 ...

  8. LeetCode简单题之检查单词是否为句中其他单词的前缀

    题目 给你一个字符串 sentence 作为句子并指定检索词为 searchWord ,其中句子由若干用 单个空格 分隔的单词组成. 请你检查检索词 searchWord 是否为句子 sentence ...

  9. LeetCode简单题之整理字符串

    题目 给你一个由大小写英文字母组成的字符串 s . 一个整理好的字符串中,两个相邻字符 s[i] 和 s[i+1],其中 0<= i <= s.length-2 ,要满足如下条件: 若 s ...

最新文章

  1. 【Qt】Qt再学习(十六):QObject::connect: Cannot queue arguments of type ‘QString‘
  2. python group()
  3. 又发现一个关于R文件丢失的问题
  4. qt练习7 定时爆炸小游戏
  5. 程序不能使用中文名_这几款车没有中文名?那买车时应该怎么叫?
  6. tomcat点击startup.bat闪退解决办法
  7. 常见浏览器兼容性问题及解决方案
  8. 如何通过破解hash来获取管理员密码(转)
  9. LeetCode 1115. 交替打印FooBar
  10. Java中删除一个文件夹下的所有文件(包括子目录内的文件)
  11. 全球与中国高精度漆包扁铜线市场深度研究分析报告
  12. 《博客园精华集》ASP.NET分册第2论筛选结果文章列表
  13. 关于antd中嵌套表格expandable属性如何设置为可变化的
  14. 中国IT产业未来在哪里
  15. 个性化PageRank算法
  16. 证券投资基金基础知识
  17. 罗技无线键盘linux能用吗,罗技多款产品能否只用一个无线接收器
  18. 1.树莓派Pi3简介
  19. pd虚拟机安装Windows后如何退出(进入)融合模式
  20. C# AD FS实现网站单点登录 Active Directory Federation Services-活动目录联合身份认证 AD域单点登录 ADFS单点登录

热门文章

  1. 2022-2028年中国绿冻石行业市场研究及前瞻分析报告
  2. 2022-2028年中国能源期货市场深度调研及投资前景预测报告
  3. 2019-3:时间飞逝
  4. UTF-8与UTF-8 BOM
  5. RESTful风格及其SpringMVC实现
  6. AI 芯片的分类及技术
  7. MLPerf Inference 0.7应用
  8. 自动驾驶感知系统盘点
  9. 深度学习目标检测详细解析以及Mask R-CNN示例
  10. Java基础语法运算和控制符