Leet code 438 找到字符串中所有字母异位词

文章描述了一种使用滑动窗口和两个哈希表的方法,解决给定字符串s中找到与目标字符串p具有相同字符分布的子串的问题。通过统计p中字符的出现次数并动态维护窗口内的字符计数,找出所有有效子串的起始位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解题思路:滑动窗口

三步走  进窗口  判断   出窗口   然后更新结果 

 定义两个hash表在第一个表中存 p的有效字符  比如 abc   a一个 b一个 c一个 这样就存在三个有效字符  在第二个hash表中进行滑动窗口的运行  定义一个常量count 如果滑动窗口中有效字符存在一个就 +1 

 第二个hash表中 进窗口时候怎么才能算有效字符呢? 

hash2[s[right] -'a'] <=hash1[s[right] -'a']   这个时候 count++

这个条件就是滑动窗口中比如a 有 1个 或者2个 3个等等 但是它不能大于p中a的个数 一旦大于就非有效 

之后判断我们滑动窗口大于p的数组长度时候就需要删减

            char out=s[left++];

            if(hash2[out-'a']<=hash1[out-'a']) count--;   判断出去的是否为有效字符

            hash2[out-'a']--;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值