1. 程式人生 > >【python/leetcode/Hard】Substring with Concatenation of All Words

【python/leetcode/Hard】Substring with Concatenation of All Words

題目

在這裡插入圖片描述

基本思路

使用一個字典統計一下words中每個單詞的數量。由於每個單詞的長度一樣,以題中給的例子而言,可以3個字母3個字母的檢查,如果不在字典中,則break出迴圈。有一個技巧是建立一個臨時字典currDict,用來統計s中那些在words中的單詞的數量,必須和words中單詞的數量相等,否則同樣break。

實現程式碼

class Solution(object):
    def findSubstring(self, s, words):
        """
        :type s: str
        :type words: List[str]
        :rtype: List[int]
        """
wordsNum = len(words) sLen = len(s) if wordsNum == 0 or sLen == 0: return [] wordLen = len(words[0]) wordsDict = {} for word in words: wordsDict[word] = wordsDict[word]+1 if word in wordsDict else 1 res =
[] # i 代表起始位置 for i in range(sLen+1-wordsNum*wordLen): curDict = {} j = 0 while j < wordsNum: word = s[i+j*wordLen:i+j*wordLen+wordLen] if word not in wordsDict: break
curDict[word] = curDict[word]+1 if word in curDict else 1 if curDict[word] > wordsDict[word]: break j += 1 if j == wordsNum: res.append(i) return res