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
}