首页 > 其他分享 >30. 串联所有单词的子串

30. 串联所有单词的子串

时间:2024-09-13 23:16:04浏览次数:6  
标签:子串 word text 30 len 单词 start words diff

题目链接 30. 串联所有单词的子串
思路 滑动窗口
题解链接 官方题解
关键点 线性平移的动作;有明确状态量;应当使用滑动窗口
时间复杂度 \(O(\text{len}(\text{words}_0))\times\text{len}(s))\)
空间复杂度 \(O(\text{len}(\text{words}_0)\times\#\text{words})\)

代码实现:

class Solution:
    def findSubstring(self, s: str, words: List[str]) -> List[int]:
        answer = []
        m = len(words)
        n = len(words[0])
        ls = len(s)

        for i in range(n):
            if i + m * n > ls:
                break
            diff = defaultdict(int)
            for j in range(m):
                word = s[i + j * n : i + (j+1) * n]
                diff[word] += 1
            for word in words:
                diff[word] -= 1
                if diff[word] == 0:
                    del diff[word]
            
            for start in range(i, ls-m*n+1, n):
                if start != i:
                    word = s[start + (m-1)*n: start + m*n]
                    diff[word] += 1
                    if diff[word] == 0:
                        del diff[word]
                    word = s[start - n: start]
                    diff[word] -= 1
                    if diff[word] == 0:
                        del diff[word]
                if len(diff) == 0:
                    answer.append(start)

        return answer

标签:子串,word,text,30,len,单词,start,words,diff
From: https://www.cnblogs.com/WrRan/p/18413061

相关文章

  • P7730 [JDWOI-1] 蜀道难
    感觉每一步都挺自然的。首先连续加减让我们不难想到差分,每次给\(d_i\)加一或减一,每次给\(d_{i+l}\)减一或加一。然后要求单调不降就是要求每个\(d_i\)大于等于\(0\)。然后注意到我们每次操作相当于是\(i\)向\(i+l\)贡献\(1\)或者\(i+l\)向\(i\)贡献\(1\),结合......
  • 22320302 张睿漪
    根据今天的课堂,了解到了很多未曾了解过但又非常实用的小知识,或者也可以说是小知识点,在博客上进行记录也是希望自己能够记住~1.在关键词的前面使用减号,能在查询结果中不出现该关键词,格式为“关键词A+空格+减号+关键词B”2.使用filetype指令可以查询特定格式的文件,比如doc/txt/ppt/......
  • 学习笔记 韩顺平 零基础30天学会Java(2024.9.13)
    P545TreeMap源码解读     TreeSet的k-v其中的v是一个静态的对象,但是TreeMap的v是可以变化的     TreeMap使用默认构造器取出的顺序和添加的顺序是不一样的,但是有构造器实现了Comparator接口的匿名内部类,可以按顺序排序P546Collections工具类1P547Collect......
  • ACCT3003: Accounting Modelling and Data
    ACCT3003:AccountingModellingandDataVisualisationFolioAssignmentGuide,Semester2, 2024Due Date for Submission: Sunday 15/9/2024 at 5.00 PMPleasenotethatthePractical AssignmentforACCT3003AccountingModellingandDataVisualisationis......
  • LeetCode 692.前K个高频单词
    LeetCode692.前K个高频单词C++思路......
  • SVN在MacOS下报E230001错误
    #macos#riderforMac  #SVN#E230001svn为什么会报E230001错误呢?根据详细错误信息ServerSSLcertificateverificationfailed:certificateissued知道这是https证书有问题,不用管它证书了,这里介绍一种简单的方法。首先,打开终端(terminal,macos/linux一般都是带有svn的,不......
  • 2024 ICPC复习 20-30页
    https://www.luogu.com.cn/problem/CF1703G首先这个题一定要意识到他是一个折半的操作1e9最多被操作30次所以我么完全dp第二维可以放这个次数然后dp数组就开出来了时间复杂度也就明确了对于某一个箱子可以使用好钥匙打开也可以不用用坏钥匙好钥匙打开就是dpij=dp[......
  • MBR30200PT-ASEMI开关电源专用MBR30200PT
    编辑:llMBR30200PT-ASEMI开关电源专用MBR30200PT型号:MBR30200PT品牌:ASEMI封装:TO-247安装方式:插件批号:最新最大平均正向电流(IF):30A最大循环峰值反向电压(VRRM):200V最大正向电压(VF):0.70V~0..90V工作温度:-65°C~175°C反向恢复时间:35ns芯片个数:2芯片尺寸:74mil引脚数量:3正向......
  • VMware Avi Load Balancer 30.2.2 发布下载,新增功能概览
    VMwareAviLoadBalancer30.2.2-多云负载均衡平台应用交付:多云负载均衡、Web应用防火墙和容器Ingress服务负载均衡平台VMwareAviLoadBalancerVMwareAviLoadBalancer可简化应用交付,并提供多云负载均衡、Web应用防火墙和容器Ingress服务。名称变更VMwareNS......
  • 12V24V30V36V48V52V60V降压恒压芯片IC -H6246 电流简单,外围少,性价比高 仪表盘供电方案
    H6246降压恒压芯片:高效、可靠、多功能的电源管理解决方案在现代电子设备中,电源管理芯片扮演着至关重要的角色。今天,我们要为大家介绍一款性能出色、功能丰富的降压恒压芯片——H6246。这款芯片以其高效、可靠和多功能的特点,成为众多应用场景中的不错选择。高效性能:H6246支持宽电压......