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每日leetcode一题

leetcode每日leetcode一题

每日leetcode一题

leetcode每日一题(2020-06-07):990. 等式方程的可满足性

leetcode每日一题(2020-06-07):990. 等式方程的可满足性

《LeetCode之每日一题》:30.停在原地的方案数