Leetcode 567. 字符串的排列

Leetcode 567. 字符串的排列

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

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

示例:

输入:s1 = "ab" s2 = "eidbaooo"
输出:true
解释:s2 包含 s1 的排列之一 ("ba").
class Solution {
    public boolean checkInclusion(String s1, String s2) {
        char [] res1 = s1.toCharArray();
        char [] res2 = s2.toCharArray();
        
        int[] count1 = new int[26];//记录s1中字符出现的个数
        int[] count2 = new int[26];//记录窗口中

        int l1 = res1.length;
        int l2 = res2.length;

        //滑动窗口大小固定为l1
        int left = 0;
        int right = l1-1;

        if(l1>l2){//记得加这个条件
            return false;
        }
        
        for(int i =0;i<=right;i++){//统计s1中字符出现的个数
        	count1[res1[i]-'a']++;
        }
        
        for(int i =0;i<right;i++){//添加初始滑动窗口,只添加到right-1
            count2[res2[i]-'a']++; 
        }
        
        while(right<l2){
        	count2[res2[right]-'a']++; //将right位置添加进滑动窗口
        	if(Arrays.equals(count1, count2)) {//比较两者是否相同,相同则说明是子串(因为不需要顺序相同)
        		return true;
        	}
        	else{
        		right++;		
        		count2[res2[left]-'a']--;//将left移出滑动窗口
        		left++;
        	}
        }
        return false;
    }
}
上一篇:四、数据类型_6.(2).set - frozenset 冰冻集合


下一篇:按位运算符总结