给定一个字符串s和一个由多个等长字符串组成的列表words,输出列表中的字符串组成的整体在s中的所有可能的位置

示例:

输入:s = "abcmmedfrgaqwedfrmme"   words=["mme","dfr"]

输出:[3,14]

Python解决方案:

class Solution(object):
    def findSubstring(self, s, words):
        """
        :type s: str
        :type words: List[str]
        :rtype: List[int]
        """
        if not words:
            return []
        w_len = len(words[0])       
        all_len = w_len*len(words)
        
        out = []
        word_count = collections.Counter(words)
        
        for i in range(len(s)-all_len+1):
            sub_i = s[i:i+w_len]
            if sub_i in word_count:
                j = i + w_len
                wc = word_count.copy()
                wc[sub_i] -= 1
                while j <= all_len + i-w_len:
                    sub = s[j:j+w_len]
                    if sub in wc and wc[sub]:
                        wc[sub] -= 1
                        j += w_len
                        pre = sub
                    else:
                        break
                if not sum(wc.values()):
                    out.append(i)                  
        return out

猜你喜欢

转载自www.cnblogs.com/wenqinchao/p/10688959.html
今日推荐