567.M 字符串的排列
Problem: 567. 字符串的排列
思路
先用count
记录s1中每个字符的数量(负数),然后用left
和right
维护一个滑动窗口,每次右边界移动时,把右边界对应字符的数量加一,如果该字符的数量大于0,则意味着该字符不包含在s1中,或者该字符的数量已经多于s1中该字符的数量,因此一直左移窗口,直到该字符数量恢复为0。
每移动一轮窗口后,检查窗口大小是否与s1长度相同,是则找到了该字符串的排列。
Code
func checkInclusion(s1 string, s2 string) bool {
if len(s1) > len(s2) {
return false
}
count := [26]int{}
for _, ch := range s1 {
count[ch-'a']--
}
left := 0
for right, ch := range s2 {
count[ch-'a']++
for count[ch-'a'] > 0 {
count[s2[left]-'a']--
left++
}
if right-left+1 == len(s1) {
return true
}
}
return false
}
Last updated
Was this helpful?