題目:
給定兩個字串 s1 和 s2,寫乙個函式來判斷 s2 是否包含 s1 的排列。換句話說,第乙個字串的排列之一是第二個字串的子串。
思路:
滑動視窗求解
用字典dic1 統計s1中的元素組成。用字典dic2統計 與s1等長的s2子串 的元素組成。當dic1==dic2,即可返回true。
解答:
class
solution
:def
checkinclusion
(self, s1:
str, s2:
str)
->
bool
:if s1 in s2:
return
true
iflen
(s1)==1
:return
false
l1,l2=
len(s1)
,len
(s2)
dic1=
for c in s1:
dic1[c]
=dic1.get(c,0)
+1left,right=
0,l1
dic2=
for c in s2[left:right]
: dic2[c]
=dic2.get(c,0)
+1if dic1==dic2:
return
true
while right
dic2[s2[left]]-=
1if dic2[s2[left]]==
0:del dic2[s2[left]
] left+=
1if s2[right]
in dic2:
dic2[s2[right]]+=
1else
: dic2[s2[right]]=
1 right+=
1if dic1==dic2:
return
true
return
false
每日一題 LeetCode
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。示例 1 輸入 7,5,6,4 輸出 5 限制 0 陣列長度 50000 思想是 分治演算法 所有的 逆序對 於 3 個部分 左邊區間的逆序對 右邊區間的逆序對 橫跨兩個區間的...
LeetCode每日一題(題1028)
最近在刷leetcode每日一題,每次做完之後總能有些收穫,所以想著不如每天寫個部落格記錄一下做的題目的解法以及自己寫的時候問題出在 從先序遍歷還原二叉樹 題目大意 給出乙個字串 1 2 3 4 5 6 7 1代表節點的值,前面的 個數代表節點的深度。如果只有乙個子節點,保證這個節點為左子節點。返回...
LeetCode每日一題(題139)
題目 題目大意 給出乙個字串s和乙個字串陣列words,判斷s是否能夠拆分成多個words中的字串。分析 這道題比較簡單的方式應該是採用動態規劃來做。對於任意乙個字串中的區間,可以判斷該區間組成的字串是否在字典中,如果是,則這個區間的真假取決於前面那個區間的真假。給出狀態轉移方程dp i dp j ...