返回

Python描述 LeetCode 30. 串联所有单词的子串

发布时间:2023-08-12 21:06:31 132

Python描述 LeetCode 30. 串联所有单词的子串

  大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号、GitHub、B站等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~

  如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息.

Python描述 LeetCode 30. 串联所有单词的子串_python

本文原创为【亓官劼】(qí guān jié ),请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 全部文章请关注微信公众号【亓官劼】。

题目

给定一个字符串 ​​s​​ 和一些 长度相同 的单词 ​​words​​​ **。**找出 ​​s​​​ 中恰好可以由 ​​words​​ 中所有单词串联形成的子串的起始位置。

注意子串要与 ​​words​​ 中的单词完全匹配,中间不能有其他字符 ,但不需要考虑 ​​words​​ 中单词串联的顺序。

示例 1:

输入:s = "barfoothefoobarman", words = ["foo","bar"]
输出:[0,9]
解释:
从索引 0 和 9 开始的子串分别是 "barfoo" 和 "foobar" 。
输出的顺序不重要, [9,0] 也是有效答案。

示例 2:

输入:s = "wordgoodgoodgoodbestword", words = ["word","good","best","word"]
输出:[]

示例 3:

输入:s = "barfoofoobarthefoobarman", words = ["bar","foo","the"]
输出:[6,9,12]

提示:

  • ​1 <= s.length <= 104​
  • ​s​​ 由小写英文字母组成
  • ​1 <= words.length <= 5000​
  • ​1 <= words[i].length <= 30​
  • ​words[i]​​ 由小写英文字母组成

解题思路

滑动窗口。字典记录words中每个单词的次数,然后以整个words的长度作为一个窗口,每次移动一个word单词长度的距离,这里要注意,计算单词数量的时候不能用count,防止交叉导致的错误,直接使用字符串截断

Python描述

class Solution:
def findSubstring(self, s: str, words: List[str]) -> List[int]:

# 滑动窗口,每次移动一个word_len的窗口
word_dict = {}
target_word_dict = {}
word_len = len(words[0])
words_len = word_len * len(words)
n = len(s)
res = []
for item in words:
target_word_dict[item] = target_word_dict.get(item,0)+1
for i in range(word_len):
if i > n - words_len:
break
j = i
word_dict = {}
for w in range(len(words)):
word_dict[s[i+w*word_len:i+(w+1)*word_len]] = word_dict.get(s[i+w*word_len:i+(w+1)*word_len],0) + 1
while j <= n - words_len:
flag = True
for word,cnt in target_word_dict.items():
if word_dict.get(word,0) != cnt:
flag = False
break
if flag:
res.append(j)
word_dict[s[j:j+word_len]] -= 1
j += word_len
if j + words_len <= n:
word_dict[s[j+words_len-word_len:j+words_len]] = word_dict.get(s[j+words_len-word_len:j+words_len],0) + 1
return

 

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线