文章目录
- Given two strings s1 and s2, return true if s2 contains a permutation of s1, or false otherwise. In other words, return true if one of s1's permutations is the substring of s2. Input: s1 = "ab", s2 = "eidbaooo" Output: true Explanation: s2 contains one permutation of s1 ("ba"). https://leetcode.com/problems/permutation-in-string/
- Slide Window
- submit code class Solution: def checkInclusion(self, s1: str, s2: str) -> bool: need_dict = {} need_count = 0 # 需求字典创建 for i in s1: need_dict[i] = need_dict.get(i,0) + 1 need_count += 1 window_list = {} right = 0 left = 0 valid = 0 while right < len(s2): c = s2[right] right += 1 if(need_dict.get(c,0) > 0): window_list[c] = window_list.get(c,0) + 1 if(window_list.get(c) == need_dict.get(c)): valid += 1 while(right - left >= len(s1)): if(valid == len(need_dict)): return True d = s2[left] left += 1 if(need_dict.get(d)): if(need_dict.get(d) == window_list.get(d,0)): valid -= 1 window_list[d] = window_list.get(d) - 1 return False full code class Solution: def checkInclusion(self, s1: str, s2: str) -> bool: need_dict = {} # 需求字典创建 for i in s1: need_dict[i] = need_dict.get(i,0) + 1 window_list = {} right = 0 left = 0 valid = 0 while right < len(s2): c = s2[right] # print("c"+c) right += 1 if(need_dict.get(c)): window_list[c] = window_list.get(c,0) + 1 if(window_list.get(c) == need_dict.get(c)): valid += 1 while(right - left >= len(s1)): if(valid == len(need_dict)): return True d = s2[left] left += 1 if(need_dict.get(d)): if(need_dict.get(d) == window_list.get(d,0)): valid -= 1 window_list[d] = window_list.get(d) - 1 return False S = Solution() # s1 = "ab" # s2 = "eidbaooo" s1 = "abcdxabcde" s2 = "abcdeabcdx" print(S.checkInclusion(s1,s2))
Given two strings s1 and s2, return true if s2 contains a permutation of s1, or false otherwise.
In other words, return true if one of s1's permutations is the substring of s2.
Input: s1 = "ab", s2 = "eidbaooo"
Output: true
Explanation: s2 contains one permutation of s1 ("ba").
Slide Window
Slide Window
- submit code
class Solution:
def checkInclusion(self, s1: str, s2: str) -> bool:
need_dict = {}
need_count = 0
# 需求字典创建
for i in s1:
need_dict[i] = need_dict.get(i,0) + 1
need_count += 1
window_list = {}
right = 0
left = 0
valid = 0
while right < len(s2):
c = s2[right]
right += 1
if(need_dict.get(c,0) > 0):
window_list[c] = window_list.get(c,0) + 1
if(window_list.get(c) == need_dict.get(c)):
valid += 1
while(right - left >= len(s1)):
if(valid == len(need_dict)):
return True
d = s2[left]
left += 1
if(need_dict.get(d)):
if(need_dict.get(d) == window_list.get(d,0)):
valid -= 1
window_list[d] = window_list.get(d) - 1
return False
- full code
class Solution:
def checkInclusion(self, s1: str, s2: str) -> bool:
need_dict = {}
# 需求字典创建
for i in s1:
need_dict[i] = need_dict.get(i,0) + 1
window_list = {}
right = 0
left = 0
valid = 0
while right < len(s2):
c = s2[right]
# print("c"+c)
right += 1
if(need_dict.get(c)):
window_list[c] = window_list.get(c,0) + 1
if(window_list.get(c) == need_dict.get(c)):
valid += 1
while(right - left >= len(s1)):
if(valid == len(need_dict)):
return True
d = s2[left]
left += 1
if(need_dict.get(d)):
if(need_dict.get(d) == window_list.get(d,0)):
valid -= 1
window_list[d] = window_list.get(d) - 1
return False
S = Solution()
# s1 = "ab"
# s2 = "eidbaooo"
s1 = "abcdxabcde"
s2 = "abcdeabcdx"
print(S.checkInclusion(s1,s2))
class Solution:
def checkInclusion(self, s1: str, s2: str) -> bool:
need_dict = {}
need_count = 0
# 需求字典创建
for i in s1:
need_dict[i] = need_dict.get(i,0) + 1
need_count += 1
window_list = {}
right = 0
left = 0
valid = 0
while right < len(s2):
c = s2[right]
right += 1
if(need_dict.get(c,0) > 0):
window_list[c] = window_list.get(c,0) + 1
if(window_list.get(c) == need_dict.get(c)):
valid += 1
while(right - left >= len(s1)):
if(valid == len(need_dict)):
return True
d = s2[left]
left += 1
if(need_dict.get(d)):
if(need_dict.get(d) == window_list.get(d,0)):
valid -= 1
window_list[d] = window_list.get(d) - 1
return False
class Solution:
def checkInclusion(self, s1: str, s2: str) -> bool:
need_dict = {}
# 需求字典创建
for i in s1:
need_dict[i] = need_dict.get(i,0) + 1
window_list = {}
right = 0
left = 0
valid = 0
while right < len(s2):
c = s2[right]
# print("c"+c)
right += 1
if(need_dict.get(c)):
window_list[c] = window_list.get(c,0) + 1
if(window_list.get(c) == need_dict.get(c)):
valid += 1
while(right - left >= len(s1)):
if(valid == len(need_dict)):
return True
d = s2[left]
left += 1
if(need_dict.get(d)):
if(need_dict.get(d) == window_list.get(d,0)):
valid -= 1
window_list[d] = window_list.get(d) - 1
return False
S = Solution()
# s1 = "ab"
# s2 = "eidbaooo"
s1 = "abcdxabcde"
s2 = "abcdeabcdx"
print(S.checkInclusion(s1,s2))
