LeetCode 30 Substring with Concatenation of All Words(AC自动机+滑动窗口)

这篇博客介绍了如何利用AC自动机和滑动窗口优化算法,解决寻找字符串中包含所有字典单词组合的子串问题。通过AC自动机预处理,将时间复杂度优化到O(m*w+n),显著优于O(n*m*w)的朴素解法。
摘要由CSDN通过智能技术生成

题意:给出一个字符串,和一个字典,字典中有若干个单词(可能有重复单词),每个单词的长度相等,现在要求所有字典中全部单词的任意组合在字符串中的起始下标。

思路:首先先说一下用ac自动机复杂度可以优化到O(n)啊!!!!!!看了votes最高的答案,复杂度是O(n*k)(n为字符串长度,k为字典中单词长度)。

现在 说一下做法,设字符串长度为n,字典中有m个单词,每个单词长度为w。

朴素的做法是对于每个位置,对于从它向后的m*w个位置进行判断,看看是否符合要求,这样做的时间复杂度为O(n*m*w),

那么怎么优化呢,可以用滑动窗口的思想,用两个指针标记一下窗口的起止位置,在窗口中的单

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值