給你乙個字串 s、乙個字串 t,請在字串 s 裡面找出:包含 t 所有字元的最小子串。
示例:
輸入: s = "adobecodebanc", t = "abc"
輸出: "banc"
說明:
**:
lass solution:
def minwindow(self, s: 'str', t: 'str') -> 'str':
from collections import counter
t = counter(t)
lookup = counter()
start = 0
end = 0
min_len = float("inf")
res = ""
while end < len(s):
lookup[s[end]] += 1
end += 1
#print(start, end)
while all(map(lambda x: lookup[x] >= t[x], t.keys())):
if end - start < min_len:
res = s[start:end]
min_len = end - start
lookup[s[start]] -= 1
start += 1
return res
all()函式:
>>> all(['a', 'b', 'c', 'd']) # 列表list,元素都不為空或0
true
>>> all(['a', 'b', '', 'd']) # 列表list,存在乙個為空的元素
false
>>> all([0, 1,2, 3]) # 列表list,存在乙個為0的元素
false
>>> all(('a', 'b', 'c', 'd')) # 元組tuple,元素都不為空或0
true
>>> all(('a', 'b', '', 'd')) # 元組tuple,存在乙個為空的元素
false
>>> all((0, 1, 2, 3)) # 元組tuple,存在乙個為0的元素
false
>>> all() # 空列表
true
>>> all(()) # 空元組
true
collections模組—— counter:
>>> c = counter("abcdefgab")
>>> c["a"]
2>>> c["c"]
1>>> c["h"]
0
map()函式:
>>>def square(x) : # 計算平方數
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 計算列表各個元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函式
[1, 4, 9, 16, 25]
# 提供了兩個列表,對相同位置的列表資料進行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]
python中可以用如下方式表示正負無窮:
float("inf"), float("-inf")
最小圓覆蓋
最小圓覆蓋。神奇的隨機演算法。當點以隨機的順序加入時期望複雜度是線性的。algorithm a 令ci表示為前i個點的最小覆蓋圓。當加入新點pi時如果pi不在ci 1裡那麼pi必定在ci的邊界上。b 再從新考慮這樣乙個問題,ci為前i個點最小覆蓋圓且p在ci的的邊界上!同理加入新點pi時如果p i不...
最小覆蓋問題
acm模版 最小路徑覆蓋o n 3 路徑覆蓋 就是在圖中找一些路經,使之覆蓋了圖中的所有頂點,且任何乙個頂點有且只有一條路徑與之關聯。最小路徑覆蓋 就是找出最少的路徑條數,使之成為p的乙個路徑覆蓋。路徑覆蓋與二分圖匹配的關係 最小路徑覆蓋 p 最大匹配數 其中最大匹配數的求法是把p中的每個頂點pi分...
最小點覆蓋
題目連線 最小點覆蓋為 在乙個二分圖中,選取最少的點可以把所有的變覆蓋,點的最少個數就是最小點覆蓋。最小點覆蓋 最大二分匹配。克魯斯卡爾演算法。關於本題 把從零開始,轉化成從一開始。起點不用加入e,因為機器的起始狀態就是1,或者加入e但是不參加計算,我採用的是第二種。include include ...