先看一下我的戰況,看看那三個七分鐘…,沒辦法著急了受,其實大部分時間就是花在了調邊界條件上了。
然後說一下思路吧:其實就是使用空間換取時間,但是我的時間沒有很低,反而空間比我想象的要低一些。步驟如下:
我們把words中的所有單詞放到雜湊表中,其中的鍵為每個單詞,值為單詞的次數。
然後我們遍歷這個字串s,而且每次遍歷的子串長度都應該和words陣列中所有字串長度的總和一樣,即words.length * words[0].length()
。
然後我們對子串中每個長度為words[0].length
的單詞進行檢查,看看雜湊表裡面是否有它,或者它是不是已經出現過了:如果沒有則直接break,這個子串不符合;如果有而且對應的出現次數大於0,則將出現次數減1。
一直到最後如果子串中的每個單詞都符合,那麼就將這個子串的開始索引放到結果中。否則檢查下乙個子串。
**如下:
public list
findsubstring
(string s, string[
] words)
else}if
(index == tail)
head++
;//此處子串的前進步長為1
tail++
;reset
(flag, words)
;//每次遍歷完乙個子串,都要重置訪問標誌
}return result;
}private
void
reset
(map
flag, string[
] words)
}for
(int i =
0; i < words.length;
++i)
if(flag.
containskey
(words[i]))
else
}
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...