给定一个字符串 s
和一个字符串数组 words
。 words
中所有字符串 长度相同。
s
中的 串联子串 是指一个包含 words
中所有字符串以任意顺序排列连接起来的子串。
- 例如,如果
words = ["ab","cd","ef"]
, 那么"abcdef"
,"abefcd"
,"cdabef"
,"cdefab"
,"efabcd"
, 和"efcdab"
都是串联子串。"acdbef"
不是串联子串,因为他不是任何words
排列的连接。
返回所有串联字串在 s
中的开始索引。你可以以 任意顺序 返回答案。
示例:
1 | 输入:s = "barfoothefoobarman", words = ["foo","bar"] |
分析:
1 | 一种比较简单的暴力做法是枚举s的每个位置,然后考虑以该位置为起点是否存在一个由words里所有单词拼接而成的字符串,由于每个word长度相同,可以利用哈希表,一个单词一个单词的来枚举,看最后是否用完了words里的单词并且中间不存在不合法的单词。这样的复杂度为O(n∗w∗m),n为字符串s的长度,w是单词的长度,m是单词列表words的长度。不过这个做法会超时。 |
代码
1 | class Solution { |
[原题链接](30. 串联所有单词的子串 - 力扣(Leetcode))