美文网首页
leetcode 030. 与所有单词相关联的字串

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

作者: 阳光树林 | 来源:发表于2019-01-01 19:49 被阅读7次

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

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

    示例 1:

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

    class Solution:
        def findSubstring(self, s, words):
            dic_words = {}
            if not (s and words):
                return []
            for word in words:
                if word in dic_words:
                    dic_words[word] += 1
                else:
                    dic_words[word] = 1
            len_s = len(s)
            len_word = len(words[0])
            count_words = len(words)
            res = []
            for i in range(len_s - count_words * len_word + 1):
                j = 0
                dic_tmp = {}
                while j < count_words:  # 把单词数量都取完
                    tmp_word = s[i + j * len_word: i + (j + 1) * len_word]
                    if tmp_word not in dic_words: # 如果不在目标字典就退出
                        break
                    if tmp_word in dic_words and tmp_word not in dic_tmp:
                        dic_tmp[tmp_word] = 1
                    else:
                        dic_tmp[tmp_word] += 1
                        if dic_tmp[tmp_word] > dic_words[tmp_word]: # 如果超过单词数量就退出
                            break
                    j += 1
                else: # 循环完成后表示所有单词都统计完成
                    res.append(i)
            return res
    
    
    su = Solution()
    s = "wordgoodgoodgoodbestword"
    words = ["word", "good", "best", "word"]
    res = su.findSubstring(s, words)
    print(res)
    

    相关文章

      网友评论

          本文标题:leetcode 030. 与所有单词相关联的字串

          本文链接:https://www.haomeiwen.com/subject/yxkolqtx.html