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

Posted 秦qin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给定一个字符串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

 

以上是关于给定一个字符串s和一个由多个等长字符串组成的列表words,输出列表中的字符串组成的整体在s中的所有可能的位置的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 给定一个字符串s和一个单词字典dict,确定s是否可以被分割成一个或多个字典的空格分隔序列w

数据分析--pandas DataFrame

2022-03-25:给定一个长度为 N 的字符串 S,由字符‘a‘和‘b‘组成,空隙由 ‘?‘ 表示。 你的任务是用a字符或b字符替换每个间隙, 替换完成后想让连续出现同一种字符的最长子串尽可能短。

Java基础-正则表达式

C语言 输入10个等长的字符串,用另一个函数对它们排序,由小到大依次输出字符串

C语言 输入10个等长的字符串,用另一个函数对它们排序,由小到大依次输出字符串