class Solution:
def checkInclusion(self, s1: str, s2: str) -> bool:
if not s1 and not s2:
return True
if not s1 or not s2:
return False
#计算s1和s2的长度
l1,l2 = len(s1),len(s2)
#对s1中的各个元素进行Counter计算
c1 = Counter(s1)
c2 = Counter()
l,r = 0,0
while r<l2:
#如果新元素没出现在字典中,进行更新
c2[s2[r]]+=1
#如果在窗口大小为l1的数组中,两个hash表相同,则返回True
if c1==c2:
return True
#移动右指针
r+=1
#维护一个大小为l1的窗口
if r-l+1>l1:
#左移的话,字典计算减1
c2[s2[l]]-=1
#如果计算减1之后为0,则删掉c2字典中的元素
#因为{'a':0,'b':1}!={'b':1}
if c2[s2[l]]==0:
del c2[s2[l]]
#同时移动左右指针
l+=1
return False
- 最初にそれが空であるかどうかを判断し、それが空でない場合は、スライディングウィンドウ法を使用してそれを行います
- アイデア:s1と同じサイズのスライディングウィンドウを維持し、このウィンドウに表示される文字数が同じかどうかを判断します。同じ場合、s2にはs1が含まれます。
- 最初に2つの辞書を宣言し、1つの辞書はs1によって計算され、空の辞書はs2の要素をカウントするために使用されます
- 最初にc2辞書を更新し、次に2つの辞書が同じであるかどうかを判断します。異なる場合は、右のポインターを移動します。
- 次に、現在のウィンドウがl1より大きいかどうかを判別し、大きい場合は、ウィンドウを1単位左に移動し、辞書のカウントを減算します。
- whileループで満たされない場合は、s2にs1が含まれていないことを意味し、Falseを直接返します。
#前の最後のブラシ