【LeetCode】567. 字符串的排列

567. 字符串的排列

知识点:字符串;滑动窗口

题目描述

给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。

换句话说,s1 的排列之一是 s2 的 子串 。

示例
示例 1: 输入:s1 = "ab" s2 = "eidbaooo" 输出:true 解释:s2 包含 s1 的排列之一 ("ba") 示例 2: 输入:s1= "ab" s2 = "eidboaoo" 输出:false

解法一:滑动窗口

这其实也是滑动窗口的一道典型题目
注意题目中,排列的顺序不同可以算正确答案,所以只需要s1字典和当前窗口内的字典一模一样(含有的key相同,value也相同)即可了。
所以可以直接维持一个长度是s1的滑动窗口,并且统计窗口内的字典,然后和s1的字典比较即可了;
if两者一样,那直接返回即可
if两者不一样,那这个窗口移动,左、右都移动一个距离;

from collections import Counter, defaultdict class Solution: def checkInclusion(self, s1: str, s2: str) -> bool: count_s1 = Counter(s1) #s1中的字符数量 start = 0 count_s2 = Counter(s2[start:len(s1)-1]) for i in range(len(s1)-1, len(s2)): count_s2[s2[i]] += 1 if count_s1 == count_s2: return True else: count_s2[s2[start]] -= 1 if count_s2[s2[start]] == 0: count_s2.pop(s2[start]) start += 1 return False

__EOF__

本文作者Curryxin
本文链接https://www.cnblogs.com/Curryxin/p/16131610.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Curryxin  阅读(64)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
Live2D
欢迎阅读『【LeetCode】567. 字符串的排列』
点击右上角即可分享
微信分享提示