LeetCode 567. Permutation in String(字符串的排列) 滑动窗口/Medium


1.Description

给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。

换句话说,第一个字符串的排列之一是第二个字符串的子串。


2.Example

输入: s1 = "ab" s2 = "eidbaooo"
输出: True
解释: s2 包含 s1 的排列之一 ("ba").

输入: s1= "ab" s2 = "eidboaoo"
输出: False

3.Solution

使用了滑动窗口和Arrays.equals函数:
窗口的长度为s1的长度,定义两个数组,nums1统计s1中各个字符出现次数,然后nums2在窗口滑动过程中统计窗口中各字符出现的次数,如果两个数组相等的话说明s2含有s1的排列。

class Solution {
    
    
    public boolean checkInclusion(String s1, String s2) {
    
    
        if(s1.length()>s2.length()){
    
    
            return false;
        }
    	int[] nums1 = new int[26];
    	int[] nums2 = new int[26];
    	
    	for(int i=0;i<s1.length();i++) {
    
    
    		nums1[s1.charAt(i)-'a']++;
    		nums2[s2.charAt(i)-'a']++;
    	}
    	if(Arrays.equals(nums1, nums2)) {
    
    
    		return true;
    	}
    	
    	for(int i = s1.length();i<s2.length();i++) {
    
    
    		nums2[s2.charAt(i)-'a']++;
    		nums2[s2.charAt(i-s1.length())-'a']--;
    		if(Arrays.equals(nums1, nums2)) {
    
    
    			return true;
    		}
    	}
    	return false;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_45736160/article/details/113783601