1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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
- }
|