Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. In other words, one of the first string's permutations is the substring of the second string.
Example 1:
Input: s1 = "ab" s2 = "eidbaooo"
Output: True
Explanation: s2 contains one permutation of s1 ("ba").
Example 2:
Input:s1= "ab" s2 = "eidboaoo"
Output: False
Note:
- The input strings only contain lower case letters.
- The length of both given strings is in range [1, 10,000].
-----------------------------------------------------------------------------------------
Take care the borderlines:
from collections import Counter
class Solution:
def checkInclusion(self, s1, s2):
l1, l2 = len(s1), len(s2)
if (l1 > l2): #bug1
return False
counter = Counter(s1)
valid_count,pre = 0,0
dict = {}
for i in range(l2):
ch = s2[i]
dict[ch] = 1 if ch not in dict else dict[ch]+1
if (ch in counter and dict[ch] <= counter[ch]):
valid_count += 1
while (valid_count >= l1):
if (i-pre+1 == l1 and valid_count == l1): #bug2
return True
to_remove = s2[pre]
dict[to_remove] -= 1
if (to_remove in counter and dict[to_remove] < counter[to_remove]):
valid_count -= 1
pre += 1
return False
s = Solution()
print(s.checkInclusion("a", "ab"))