# 串联所有单词的子串

<p>给定一个字符串&nbsp;<strong>s&nbsp;</strong>和一些长度相同的单词&nbsp;<strong>words。</strong>找出 <strong>s
    </strong>中恰好可以由&nbsp;<strong>words </strong>中所有单词串联形成的子串的起始位置。</p>
<p>注意子串要与&nbsp;<strong>words </strong>中的单词完全匹配，中间不能有其他字符，但不需要考虑&nbsp;<strong>words&nbsp;</strong>中单词串联的顺序。</p>
<p>&nbsp;</p>
<p><strong>示例 1：</strong></p>
<pre><strong>输入：  s =</strong> &quot;barfoothefoobarman&quot;,<strong>  words = </strong>[&quot;foo&quot;,&quot;bar&quot;]<strong><br />输出：</strong>[0,9]<strong><br />解释：</strong>从索引 0 和 9 开始的子串分别是 &quot;barfoo&quot; 和 &quot;foobar&quot; 。输出的顺序不重要, [9,0] 也是有效答案。</pre>
<p><strong>示例 2：</strong></p>
<pre><strong>输入：  s =</strong> &quot;wordgoodgoodgoodbestword&quot;,<strong>  words = </strong>[&quot;word&quot;,&quot;good&quot;,&quot;best&quot;,&quot;word&quot;]<strong><br />输出：</strong>[]</pre>

以下程序实现了这一功能，请你填补空白处内容：

```python
class Solution(object):
	def findSubstring(self, s, words):
		"""
		:type s: str
		:type words: List[str]
		:rtype: List[int]
		"""
		ls = len(s)
		word_ls = len(words[0])
		target_dict = {}
		for word in words:
			try:
				target_dict[word] += 1
			except KeyError:
				target_dict[word] = 1
		res = []
		___________________________________;
			curr_dict = target_dict.copy()
			for pos in range(start, start + word_ls * len(words), word_ls):
				curr = s[pos:pos + word_ls]
				try:
					curr_dict[curr] -= 1
					if curr_dict[curr] < 0:
						break
				except KeyError:
					break
			else:
				res.append(start)
		return res
if __name__ == '__main__':
	s = Solution()
	print(s.findSubstring('wordgoodgoodgoodbestword', ["word", "good", "best", "good"]))
```

## template

```python
class Solution(object):
	def findSubstring(self, s, words):
		"""
		:type s: str
		:type words: List[str]
		:rtype: List[int]
		"""
		ls = len(s)
		word_ls = len(words[0])
		target_dict = {}
		for word in words:
			try:
				target_dict[word] += 1
			except KeyError:
				target_dict[word] = 1
		res = []
		for start in range(ls - word_ls * len(words) + 1):
			curr_dict = target_dict.copy()
			for pos in range(start, start + word_ls * len(words), word_ls):
				curr = s[pos:pos + word_ls]
				try:
					curr_dict[curr] -= 1
					if curr_dict[curr] < 0:
						break
				except KeyError:
					break
			else:
				res.append(start)
		return res
if __name__ == '__main__':
	s = Solution()
	print(s.findSubstring('wordgoodgoodgoodbestword', ["word", "good", "best", "good"]))
```

## 答案

```python
for start in range(ls - word_ls * len(words) + 1):
```

## 选项

### A

```python
for start in range(ls - word_ls * len(words)):
```

### B

```python
for start in range(ls + word_ls * len(words)):
```

### C

```python
for start in range(ls + word_ls * len(words) + 1):
```