【题目解析】
1. 使用python中的Counter函数,统计words中单词出现的次数;【例如示例1:Counter({'foo': 1, 'bar': 1})】
2. 每次位移一个字母,在s中截取长度等于 “words 中全部单词的长度” 的字符串(假设为C)。由于words中的每个单词长度相同(假设为L),因此将C分为 C / L = len(words) 个词;
【例如示例1:
开始索引为0时,往后取6个字母:barfoo;然后将 barfoo 分成2个词:[bar,foo];
开始索引为1时,往后取6个字母:arfoot;然后将 arfoot 分成2个词:[arf,oot];】
3. 比较 “2中的Counter结果” 与 “1中的Counter结果” 是否一致;
from collections import Counter
class Solution:
def findSubstring(self, s: str, words: List[str]) -> List[int]:
# 乱七八糟的定义变量
if not s or not words:
return []
word_counter = Counter(words)
every_word_length = len(words[0])
s_length = len(s)
result = []
every_split_length = every_word_length * len(words)
if s_length < every_split_length:
return []
# 主要思路
for i in range(0, s_length - every_split_length + 1):
cur_str = s[i: i + every_split_length]
cur_list = [cur_str[j*every_word_length : (j+1)*every_word_length] \
for j in range(len(words))]
cur_counter = Counter(cur_list)
if word_counter == cur_counter:
result.append(i)
return result