30 串聯所有單詞的子串

2021-10-05 12:26:09 字數 1049 閱讀 8250

題目

給定乙個字串 s 和一些長度相同的單詞 words。找出 s 中恰好可以由 words 中所有單詞串聯形成的子串的起始位置。

注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。

示例

輸入:s = 「wordgoodgoodgoodbestword」,

words = [「word」,「good」,「best」,「word」]

輸出:演算法思路

剛開始拿到這個題,我的思路是找到單詞words中所有能組合成的字串,然後逐個在s中比較,得到結果。這種方法明顯的不足在於將words中的所有單詞進行排列組合,會耗費大量的和空間,當單詞數量較多是,組合數也會特別多,很多組合都是不必要的,所有排除這種了思路。

另一種思路:滑動視窗,引入hashmap的鍵值對來解題。具體步驟如下:

該方法可以在第二層迴圈中優化一下,減少沒必要的遍歷。首先是判斷子串substr是否是map中的key,不存在就直接跳出當迴圈,遍歷下乙個i,存在就判斷當前map中的key對應出現的次數是否比map中的大,大於就天出迴圈。

**

class

solution

for(

int i =

0;ilength()

-alllen+

1;i++

)else

break

;//substr不在map的鍵中,結束當前迴圈}if

(map.

equals

(temp)

) res.

add(i)

;//hashmap集合中上的鍵值對與順序無關

}return res;

}}

複雜度

時間複雜度:o(mn),m是字串s的長度,n是words陣列的長度;

空間複雜度: o(n),引入了hashmap,n個鍵值對。

30 串聯所有單詞的子串

本文參考 一開始的思路是使用遞迴做出words所有結合情況的字典 然後在s中擷取words長度去查字典 結果超時了 超時 class solution for int i 0 i chang i return vectorfindsubstring string s,vector words vec...

30 串聯所有單詞的子串

給定乙個字串 s 和一些長度相同的單詞words。找出s中恰好可以由words中所有單詞串聯形成的子串的起始位置。注意子串要與words中的單詞完全匹配,中間不能有其他字元,但不需要考慮words中單詞串聯的順序。輸入 s barfoothefoobarman words foo bar 輸出 0,...

30 串聯所有單詞的子串

給定乙個字串s和一些長度相同的單詞words。找出s中恰好可以由words中所有單詞串聯形成的子串的起始位置。注意子串要與words中的單詞完全匹配,中間不能有其他字元,但不需要考慮words中單詞串聯的順序。示例 1 輸入 s barfoothefoobarman words foo bar 輸出...