func checkInclusion(s1 string, s2 string) bool {
	m, n := len(s1), len(s2)
	if n < m {
		return false
	}
	freq := make([]int, 256)
	for _, r := range s1 {
		freq[r]++
	}
	beg, end := 0, -1
	cnt := make([]int, 256)
	for end < n {
		for beg = end + 1; beg < n && freq[s2[beg]] == 0; beg++ {
		}
		copy(cnt, freq)
		for end = beg; end < n; end++ {
			ch := s2[end]
			if freq[ch] == 0 {
				break
			}
			cnt[ch]--
			for cnt[ch] < 0 {
				cnt[s2[beg]]++
				beg++
			}
			if isEmpty(cnt) {
				return true
			}
		}
	}
	if isEmpty(cnt) {
		return true
	}
	return false
}

func isEmpty(cnt []int) bool {
	for i := 'a'; i <= 'z'; i++ {
		if cnt[i] != 0 {
			return false
		}
	}
	return true
}