rustgym/leetcode/
_567_permutation_in_string.rs

1struct Solution;
2
3impl Solution {
4    fn check_inclusion(s1: String, s2: String) -> bool {
5        let mut c1: [usize; 26] = [0; 26];
6        let mut c2: [usize; 26] = [0; 26];
7        let n1 = s1.len();
8        let n2 = s2.len();
9        let s1: Vec<u8> = s1.bytes().collect();
10        let s2: Vec<u8> = s2.bytes().collect();
11        if n1 > n2 {
12            return false;
13        }
14        for i in 0..n1 {
15            c1[(s1[i] - b'a') as usize] += 1;
16            c2[(s2[i] - b'a') as usize] += 1;
17        }
18        if c1 == c2 {
19            return true;
20        }
21        for i in n1..n2 {
22            c2[(s2[i] - b'a') as usize] += 1;
23            c2[(s2[i - n1] - b'a') as usize] -= 1;
24            if c1 == c2 {
25                return true;
26            }
27        }
28        false
29    }
30}
31
32#[test]
33fn test() {
34    let s1 = "ab".to_string();
35    let s2 = "eidbaooo".to_string();
36    let res = true;
37    assert_eq!(Solution::check_inclusion(s1, s2), res);
38    let s1 = "ab".to_string();
39    let s2 = "eidboaoo".to_string();
40    let res = false;
41    assert_eq!(Solution::check_inclusion(s1, s2), res);
42}