Daily coding 最小覆蓋子串

2021-10-06 10:13:42 字數 1966 閱讀 8349

給你乙個字串 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 ...