输入:s = "wordgoodgoodgoodbestword", words = ["word","good","best","word"]
输出:[]
示例 3:
输入:s = "barfoofoobarthefoobarman", words = ["bar","foo","the"]
输出:[6,9,12]
解法一
题目有两个要点:
字符串数组里面的字符串长度都是一样的;
要求字符串数组中的字符串都要连续连在一起的,前后顺序可以是任意排列组合;
假设,words 的长度是 n,words 中每个单词的长度是 w,所以我们每次可以从字符串 s 取 n * w 长度来判断它是否是 words 的自由排列组合。
在判断时,我们先将 words 中每个单词的数量放在一个计数器中,可以用 map 表示,例如:["aaa", "bbb"] 表示成 {"aaa": 1, "bbb": 1};["aaa", "aaa", "ccc"] 表示成 {"aaa": 2, "ccc": 1};然后我们将 s 中每个 n * w 长度的子串每 w 个一组放在一个 map 中计数,最后和 words 的计数器比较是否相等,如果相等就是我们想要的子串。