力扣题库第9题:找到字符串中所有的异位词

题目:

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

示例 :

输入: s = "cbaebabacd", p = "abc"

输出: [0,6]

解释:

起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。

答案:
复制代码
# coding:utf-8
# 时间:2024/3/14 20:19
# Pythonit教程网(blog.pythonit.cn)
# Python全栈视频课件获取:www.dqu.cc
# 加速高防cdn:woaiyundun.cn
from collections import Counter


def findAnagrams(s: str, p: str) -> List[int]:
    m, n = len(p), len(s)
    if m > n:
        return []

        # 初始化 p 的字符计数
    p_counts = Counter(p)
    # 初始化滑动窗口的字符计数
    window_counts = Counter()
    # 初始化结果列表
    result = []

    # 遍历 s,维护一个长度为 m 的滑动窗口
    left = 0
    for right in range(n):
        # 窗口向右滑动,添加新的字符到窗口
        window_counts[s[right]] += 1

        # 当窗口大小达到 m,开始检查窗口的字符计数
        if right >= m - 1:
            # 如果窗口最左边的字符在 p 中出现,并且出现次数大于 0,则减少其计数
            if s[left] in p_counts and window_counts[s[left]] > p_counts[s[left]]:
                window_counts[s[left]] -= 1
                # 移动窗口左边界
            left += 1

            # 检查窗口的字符计数是否与 p 的字符计数匹配
            if window_counts == p_counts:
                result.append(left)

                # 如果窗口最左边的字符在 p 中出现,并且出现次数为 0,则需要重新计数
            if s[left] in p_counts and window_counts[s[left]] == p_counts[s[left]]:
                window_counts[s[left]] -= 1

    return result


# 示例
s = "cbaebabacd"
p = "abc"
print(findAnagrams(s, p))  # 输出: [0, 6]
相关推荐
CoderYanger9 小时前
优选算法-优先级队列(堆):75.数据流中的第K大元素
java·开发语言·算法·leetcode·职场和发展·1024程序员节
希望有朝一日能如愿以偿9 小时前
力扣每日一题:能被k整除的最小整数
数据结构·算法·leetcode
Controller-Inversion9 小时前
力扣53最大字数组和
算法·leetcode·职场和发展
rit84324999 小时前
基于感知节点误差的TDOA定位算法
算法
m0_372257029 小时前
ID3 算法为什么可以用来优化决策树
算法·决策树·机器学习
艾莉丝努力练剑10 小时前
【Python基础:语法第一课】Python 基础语法详解:变量、类型、动态特性与运算符实战,构建完整的编程基础认知体系
大数据·人工智能·爬虫·python·pycharm·编辑器
q***252110 小时前
SpringMVC 请求参数接收
前端·javascript·算法
Dream it possible!10 小时前
LeetCode 面试经典 150_图_克隆图(90_133_C++_中等)(深度优先:DFS)
c++·leetcode·面试·
gCode Teacher 格码致知10 小时前
Python基础教学:如何拼接字符串?-由Deepseek产生
python
数模加油站10 小时前
25认证杯C题成品论文第一弹【冲奖硬核+无盲点解析】
算法·数学建模·认证杯·25认证杯