Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- def find_min(characters):
- min_i = sys.maxsize
- for ch, i in characters.items():
- if i < min_i:
- min_i = i
- return min_i
- def find_max(characters):
- max_i = -1
- for ch, i in characters.items():
- if i > max_i:
- max_i = i
- return max_i
- def min_substring(S, T):
- characters = {}
- for ch in T:
- if ch not in characters:
- characters[ch] = -1
- min_i = -1
- max_i = len(S)
- min_length = len(S) + 1
- matched = 0
- for i, ch in enumerate(S):
- if ch not in characters:
- continue
- if characters[ch] == -1:
- matched += 1
- characters[ch] = i
- if matched < len(characters):
- continue
- left_i = find_min(characters)
- right_i = find_max(characters)
- length = right_i - left_i
- if length < min_length:
- min_i = left_i
- max_i = right_i
- min_length = length
- return S[min_i:max_i + 1]
- if __name__ == '__main__':
- print(min_substring('ADOBECODEBANC', 'ABC'))
Add Comment
Please, Sign In to add comment