> For the complete documentation index, see [llms.txt](https://luj.gitbook.io/code/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://luj.gitbook.io/code/two-pointers/sliding-windows/permutation-in-string.md).

# 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

```java
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;
    }
}
```
