leetcode.0030_與所有單詞相關聯的字串
給定乙個字串 s 和一些長度相同的單詞 words。在 s 中找出可以恰好串聯 words 中所有單詞的子串的起始位置。
注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。
示例1:
輸入:
s = "barfoothefoobarman",
words = ["foo","bar"]
輸出: [0,9]
解釋: 從索引 0 和 9 開始的子串分別是 "barfoor" 和 "foobar" 。
輸出的順序不重要, [9,0] 也是有效答案。
複製**
func
findsubstring
(s string, words string) int
lenw := len(words[0])
// record 記錄 words 中每個單詞總共出現的次數
record := make(map[string]int, lenws)
for _, w := range words
record[w]++
} // remain 記錄 words 中每個單詞還能出現的次數
remain := make(map[string]int, lenws)
// count 記錄符合要求的單詞的連續出現次數
count := 1
// count 的初始值只要不為 0 就可以
left, right := 0, 0
/** * s[left:right] 作為乙個視窗存在
* 假設 word:= s[right:right+lenw]
* 如果 remain[word]>0 ,那麼移動視窗 右邊,同時更新移動後 s[left:right] 的統計資訊
* remain[word]--
* right += lenw
* count++
* 否則,移動視窗 左邊,同時更新移動後 s[left:right] 的統計資訊
* remain[s[left:left+lenw]]++
* count--
* left += lenw
* * 每次移動視窗 右邊 後,如果 count = lenws ,那麼
* 說明找到了乙個符合條件的解
* 移動視窗 左邊
*/// reset 重置 remain 和 count
reset := func()
for k, v := range record
count = 0
} // moveleft 讓 left 指向下乙個單詞
moveleft := func()
// left 需要分別從這些位置開始檢查,才能不遺漏
for i := 0; i < lenw; i++
}} }
return res
}複製**
Leetcode30與所有單詞相關聯的字串。
題目 定乙個字串 s 和一些長度相同的單詞 words。在s 中找出可以恰好串聯 words 中所有單詞的子串的起始位置。注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。public static listfindsubstring str...
Leetcode 30 與所有單詞相關聯的字串
題目描述 給定乙個字串 s 和一些長度相同的單詞 words。在 s 中找出可以恰好串聯 words 中所有單詞的子串的起始位置。注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。示例 1 輸入 s barfoothefoobarman wo...
LeetCode 30 與所有單詞相關聯的字串
描述 給定乙個字串 s 和一些長度相同的單詞 words。在 s 中找出可以恰好串聯 words 中所有單詞的子串的起始位置。注意子串要與 words 中的單詞完全匹配,中間不能有其他字元,但不需要考慮 words 中單詞串聯的順序。示例 1 輸入 s barfoothefoobarman word...