欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > 字符串的排列(LeetCode)

字符串的排列(LeetCode)

2024/10/26 2:24:18 来源:https://blog.csdn.net/weixin_74254879/article/details/141307270  浏览:    关键词:字符串的排列(LeetCode)

题目

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

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

解题

from collections import Counterdef check_inclusion(s1: str, s2: str) -> bool:# s1长度大于s2时,直接返回Falseif len(s1) > len(s2):return False# 统计s1中每个字符的频率s1_count = Counter(s1)# 初始化窗口,大小为s1的长度window = Counter(s2[:len(s1)])# 如果初始窗口和s1的字符频率相同,返回Trueif window == s1_count:return True# 使用滑动窗口检查s2中是否存在s1的排列for i in range(len(s1), len(s2)):# 窗口右移,加入一个新的字符window[s2[i]] += 1# 移出窗口左侧的字符window[s2[i - len(s1)]] -= 1# 如果某个字符的计数变为0,从字典中删除if window[s2[i - len(s1)]] == 0:del window[s2[i - len(s1)]]# 如果窗口与s1的字符频率相同,返回Trueif window == s1_count:return True# 如果未找到符合条件的子串,返回Falsereturn False# 示例
s1 = "ab"
s2 = "eidbaooo"
result = check_inclusion(s1, s2)
print(result)  # 输出: True

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com