Leetcode | C++ 30-SubstringWithConcatenationOfAllWords

题目分析

给定一个字符串s,和一组等长的单词words。求出s中所有满足条件的位置,使得将words中单词排列后与s中对应位置开始的字符串匹配。

比如s="barfoothefoobarman",words=["foo", "bar"],那么0和9都是满足条件的起始位置。

约定:下面我们用s[i,l]代表s中从i开始,长度为l的子串;n代表words中单词个数,wn代表每个单词的长度;m代表字符串s长度。

解题思路(1)

最容易想法的就是暴力枚举起点,然后判断是否匹配。比方说上面例子中,现在枚举起点0,子串s[0,3]=“bar"在words中出现了,而且子串s[3,3]="foo"也在子串出现了,这时words中每个单词都被覆盖到了,那么0就是一个满足条件的位置。

由于每个位置都要枚举一遍,如果判断s[i,wn]所对应words中的单词的复杂度是O(k),那么每次判断的复杂度是O(nk),因此总的复杂度是O(mn*k)。

解题思路(2)

观察题面,我们

你可能感兴趣的:(C++小白学习教程,字符串,leetcode,算法,数据结构,哈希)