日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

leetcode 30. Substring with Concatenation of All Words 与所有单词相关联的字串 滑动窗口法

發布時間:2023/11/28 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 30. Substring with Concatenation of All Words 与所有单词相关联的字串 滑动窗口法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目描述

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

You are given a string, s, and a list of words, words, that are all of the same length. Find all starting indices of substring(s) in s that is a concatenation of each word in words exactly once and without any intervening characters.Example 1:Input:s = "barfoothefoobarman",words = ["foo","bar"]
Output: [0,9]
Explanation: Substrings starting at index 0 and 9 are "barfoor" and "foobar" respectively.
The output order does not matter, returning [9,0] is fine too.Example 2:Input:s = "wordgoodstudentgoodword",words = ["word","student"]
Output: []

題目鏈接

解題代碼

from collections import defaultdictclass Solution:def findSubstring(self, s, words):""":type s: str:type words: List[str]:rtype: List[int]"""res = []if len(words) == 0 or len(s) < len(words[0]) * len(words):return resstr_len = len(s)word_len = len(words[0])total_len = len(words) * word_lenmap_dict = defaultdict(int)cur_dict = defaultdict(int)for word in words:map_dict[word] += 1for start in range(0, str_len - total_len + 1):end = startwhile end < start + total_len:substr = s[end: end + word_len]cur_dict[substr] += 1# 如果當前dict中還有之前的沒有的,或者值比至之前的大都終止if cur_dict[substr] > map_dict[substr]:breakend += word_lenif end == start + total_len:res.append(start)cur_dict.clear()return res

主要還是用滑動窗口法解決問題,有關滑動窗口法的詳解,請看這里
完整源碼在這里

總結

以上是生活随笔為你收集整理的leetcode 30. Substring with Concatenation of All Words 与所有单词相关联的字串 滑动窗口法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。