30. 串联所有单词的子串

难度:困难
题目描述:
30. 串联所有单词的子串_第1张图片
本题总结:多学习大神的思路,一个题一个解法是没有问题的,但是学习更多的trick解法有助于积累做题灵感,另外总结并不是将每个题单独的放在这完事,需要融汇贯通,总结其中的思想,而不是题目,下一步就要做到这一点。当然了,现在还是在学习阶段,总结思想还谈不上,自己想都想不出来。
题解一:

‘’‘
	思路很直观,就是遍历每个字符的时候切分要查找的字符串总大小的“块”,然后用Counter对words和block
进行一个比较
’‘’
class Solution:
    def findSubstring(self, s: str, words: List[str]) -> List[int]:
        #思路:切分,然后每次查看是否包含全部的words
        if not s or not words:return []
        words_len = len(words) * len(words[0])
        n = len(s)
        words_c = collections.Counter(words) #Counter的是一个字符串。
        res = []
        for i in range(0, n - words_len + 1):
            #对于每一个“块”,判断是否与words_c相等
            block = s[i:i+words_len]
            tmp = [block[i:i+len(words[0])] for i in range(0, len(block), len(words[0]))]
            blk_c = collections.Counter(tmp)
            if words_c == blk_c:res.append(i)
        return res

题解一结果:
30. 串联所有单词的子串_第2张图片

你可能感兴趣的:(朱滕威的面试之路)