leetcode 每日一题 30. 串联所有单词的子串
Posted nil_f
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 每日一题 30. 串联所有单词的子串相关的知识,希望对你有一定的参考价值。
滑动窗口法
思路:
由于给定words列表中每个单词长度是一样的,则我们可以通过单词个数乘以长度得到要比对子串的长度,然后在原始字符串不断滑动比对。找到每个子串后,可以将子串按照单词长度拆分变成数组,只需要比对拆分后的数组中元素是否和words中一致即可。
代码:
class Solution: def findSubstring(self, s: str, words: List[str]) -> List[int]: if not s or not words: return [] strlen = len(s) listlen = len(words) wordlen = len(words[0]) sbstrlen = listlen * wordlen result = [] for i in range(strlen-sbstrlen+1): tempStr = s[i:i+sbstrlen] tempArray = [] for j in range(0,sbstrlen-wordlen+1,wordlen): tempArray.append(tempStr[j:j+wordlen]) isin = True for word in words: if word not in tempArray: isin = False break else: tempArray.remove(word) if isin: result.append(i) return result
以上是关于leetcode 每日一题 30. 串联所有单词的子串的主要内容,如果未能解决你的问题,请参考以下文章
leetcode每日一题(2020-06-07):990. 等式方程的可满足性