32 最小子串覆蓋

2022-02-14 18:46:43 字數 1811 閱讀 4040

中文english

給定兩個字串sourcetarget. 求source中最短的包含target中每乙個字元的子串.

樣例 1:

輸入: source = "abc", target = "ac"

輸出: "abc"

樣例 2:

輸入: source = "adobecodebanc", target = "abc"

輸出: "banc"

解釋: "banc" 是 source 的包含 target 的每乙個字元的最短的子串.

樣例 3:

輸入: source = "abc", target = "aa"

輸出: ""

解釋: 沒有子串包含兩個 'a'.

o(n) 時間複雜度

如果沒有答案, 返回"".

保證答案是唯一的.

target可能包含重複的字元, 而你的答案需要包含至少相同數量的該字元.

解法一:  同向雙指標

class

solution:

'''大致思路:

1. 給個子函式,判斷是否是符合要求的

2. 雙指標解法

'''def minwindow(self, source , target):

len1, len2 =len(source), len(target)

if len1 < len2: return

''# 定義

left, right = 0, 0

count =sys.maxsize

res = ''

for index in range(len1 - len2 + 1

): left, right = index, index +len2

while right <=len1:

ifself.ifinclude(source[left: right], target):

if right - left count = right -left

res =source[left: right]

right += 1

return

res

def ifinclude(self, source, target):

'''判斷是否包含

'''source_dict, target_dict ={}, {}

for val in

source:

source_dict[val] = source_dict.get(val, 0) + 1

for val in

target:

target_dict[val] = target_dict.get(val, 0) + 1

# 判斷

for val in

target:

if val not in

source_dict.keys():

return

false

else

:

if target_dict[val] >source_dict[val]:

return

false

return true

注意: 時間複雜度超過限制, lintcode未通過。

最小子串覆蓋

給定乙個字串source和乙個目標字串target,在字串source 中找到包括所有目標字串字母的子串。注意事項 如果在source 中沒有這樣的子串,返回 如果有多個這樣的子串,返回起始位置最小的子串。您在真實的面試中是否遇到過這個題?yes 說明在答案的子串中的字母在目標字串中是否需要具有相同...

lintcode32 最小子串覆蓋(詳細)

和乙個目標字串target 在字串source 中找到包括所有目標字串字母的子串。如果在source 中沒有這樣的子串,返回 如果有多個這樣的子串,返回起始位置最小的子串。不需要。target abc 滿足要求的解 banc 演算法流程如下 1.先將target中所有的字元出現的次數儲存到td陣列中...

LintCode M 最小子串覆蓋

給定乙個字串source 和乙個目標字串target 在字串source 中找到包括所有目標字串字母的子串。注意事項 如果在source 中沒有這樣的子串,返回 如果有多個這樣的子串,返回起始位置最小的子串。您在真實的面試中是否遇到過這個題?yes 說明在答案的子串中的字母在目標字串中是否需要具有相...