难度:困难
题目描述:
本题总结:多学习大神的思路,一个题一个解法是没有问题的,但是学习更多的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