给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。
换句话说,s1 的排列之一是 s2 的 子串 。
输入:s1 = “ab” s2 = “eidbaooo”
输出:true
解释:s2 包含 s1 的排列之一 (“ba”).
示例 2:
输入:s1= “ab” s2 = “eidboaoo”
输出:false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutation-in-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
滑动窗口
1、将s1存进c1。
2、每次在s2上移动 s1长度的窗口,并判断是否相等。
class Solution:
def checkInclusion(self, s1: str, s2: str) -> bool:
c1=collections.Counter(s1)
n=len(s2)
left=0
right=len(s1)-1
c2=collections.Counter(s2[left:right])
while right
Java实现
学到了2个map比较的方法! yyds啊
class Solution {
public boolean checkInclusion(String s1, String s2) {
Map map1 = new HashMap<>(); //对照窗口
Map map2 = new HashMap<>(); //s2中的移动窗口
int n=s2.length();
int left=0, right=s1.length()-1;
if (s1.length()>s2.length()) return false;
for (int i=0; i



