中文english
給定兩個字串source
和target
. 求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
可能包含重複的字元, 而你的答案需要包含至少相同數量的該字元.
解法一: 同向雙指標
classsolution:
'''大致思路:
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 說明在答案的子串中的字母在目標字串中是否需要具有相...