leetcode--30. 与所有单词相关联的字串

题目:30. 与所有单词相关联的字串

链接:https://leetcode-cn.com/problems/substring-with-concatenation-of-all-words/description/

题目意思很明确啦:

给定一个字符串 和一些长度相同的单词 words,找出 s 与 words 中所有单词(words 每个单词只出现一次)串联一起(words中组成串联串的单词的顺序随意)的字符串匹配的所有起始索引,子串要与串联串完全匹配,中间不能有其他字符。

举个例子,给定:
s:"barfoothefoobarman"
words:["foo", "bar"]

你应该返回的索引: [0,9]。(任意顺序)

没想到特别好的方法,我是将words做成了一个dictionary,然后s从下标0开始去匹配。不过应该会有更好的方式吧。

python:

import collections
class Solution:
    def findSubstring(self, s, words):
        """
        :type s: str
        :type words: List[str]
        :rtype: List[int]
        """
        def myfindSubstring(str, words):
            length = len(str)
            seglen = len(words[0])
            origwords = list(words)
            wordset = set(words)
            temlen = len(words) * len(words[0])
            ret = []
            pos = 0
            if length < temlen:
                return ret
            wordsdict=dict(collections.Counter(origwords))
            while pos < length:
                subs = str[pos:pos + seglen]
                if subs in wordset:
                    start = pos
                    while wordsdict.__contains__(subs):
                        wordsdict[subs]-=1
                        if wordsdict[subs]==0:
                            wordsdict.__delitem__(subs)
                        if len(wordsdict) == 0:
                            ret.append(pos)
                            break
                        start += seglen
                        subs = str[start:start + seglen]
                    wordsdict.clear()
                    wordsdict=dict(collections.Counter(origwords))
                pos += 1
            return ret
        return myfindSubstring(s, words)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值