LeetCode30 串聯所有單詞的子串

2021-10-04 08:19:34 字數 1383 閱讀 7051

解法一思路:

暴力匹配,每次取 s 定長字串,與 words 單詞匹配,若能完全匹配則將子串起始索引加入結果

匹配規則:當前遍歷字串(s.substring(i, i + wordlen))在 words 存在(去除完全不可能的匹配),且與 words 組成的雜湊表也一致。

public list

findsubstring

(string s, string[

] words)

int wordlen = words[0]

.length()

, totallen = wordlen * words.length;

mapwordsmap =

newhashmap

<

>()

;for

(string word : words)

for(

int i =

0; i <= s.

length()

- totallen; i++)}

return result;

}private

boolean

isequal

(string substr, map

wordsmap,

int wordlen)

return substrmap.

equals

(wordsmap)

;}

解法二:滑動視窗,優化字串匹配

public list

findsubstring

(string s, string[

] words)

int wordlen = words[0]

.length()

, totallen = wordlen * words.length;

mapwordsmap =

newhashmap

<

>()

;for

(string word : words)

for(

int i =

0; i < wordlen; i++)}

right += wordlen;

while

(wordsmap.

size()

== match)

string temp = s.

substring

(left, left + wordlen);if

(wordsmap.

containskey

(temp))}

left += wordlen;}}

}return result;

}

leetcode 30 串聯所有單詞的子串

leetcode題目鏈結 題目要求 找出 由words陣列組成的字串 每乙個元素word等長 在字元轉s中的位置 陣列words生成的字典dic2 遍歷字串,從頭開始判斷長度為lenwords的字串 生成的字典dic1 如果dic1 與 dic2 相同,說明找到 def findsubstring ...

leetcode 30 串聯所有單詞的子串

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

leetcode 30 串聯所有單詞的子串

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