Permutation in String

Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. In other words, one of the first string's permutations is the substring of the second string.

Example

Example 1:

Input:
s1 = "ab" s2 = "eidbaooo"

Output:
True

Explanation:
 s2 contains one permutation of s1 ("ba").

Example 2:

Input:
s1= "ab" s2 = "eidboaoo"

Output:
 False

Note

定长的比较直接,一边出一个,一边进一个,进出的时候维持好对应的逻辑

Fixed length of the window size.

Take the templet one.

Code

class Solution {
    public boolean checkInclusion(String s1, String s2) {
        int[] set = new int[26];
        for (int i = 0; i < s1.length(); i++) {
            set[s1.charAt(i) - 'a']++;
        }

        int left = 0, right = 0;
        int len = s1.length(), matched = 0;
        while (right < s2.length()) {
            if (set[s2.charAt(right) - 'a'] >= 1) {
                matched++;
            }
            set[s2.charAt(right) - 'a']--;
            right++;

            if (matched == len) {
                return true;
            }

            if (right - left == len) {
                if (set[s2.charAt(left) - 'a'] >= 0) {
                    matched--;
                }
                set[s2.charAt(left) - 'a']++;
                left++;
            }
        }

        return false;
    }
}

Last updated