leetcode30 與所有單詞相關聯的字串

2021-09-11 11:07:35 字數 1545 閱讀 7435

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...