Python, C++, JavaScript, SQL 및 TypeScript의 다양한 LeetCode 솔루션을 살펴보세요. 여러 프로그래밍 언어로 인터뷰 준비, 학습 및 코드 연습에 적합합니다. Github 레포 링크
두 개의 문자열이 주어지면 에스
그리고 티
길이의 중
그리고 N
각각, 반환 그만큼 최소 창 하위 문자열 ~의 에스
그래서 모든 문자가 티
(중복을 포함하다)가 창에 포함됩니다. 해당 하위 문자열이 없으면 다음을 반환합니다. 빈 문자열 ""
.
테스트 케이스는 다음과 같은 답으로 생성됩니다. 고유한.
예시 1:
입력: s = "ADOBECODEBANC", t = "ABC" 산출: "뱅크" 설명: 최소 창 부분 문자열 "BANC"에는 문자열 t의 'A', 'B', 'C'가 포함됩니다.
예 2:
입력: s = "a", t = "a" 산출: "에이" 설명: 전체 문자열 s는 최소 창입니다.
예시 3:
입력: s = "a", t = "aa" 산출: "" 설명: t의 두 'a'는 모두 창에 포함되어야 합니다. s의 가장 큰 창에는 'a'가 하나만 있으므로 빈 문자열을 반환합니다.
제약:
m == s.길이
n == t.길이
1 <= m, n <= 10 5
에스
그리고티
대문자와 소문자 영어 문자로 구성됩니다.
후속 조치: 실행되는 알고리즘을 찾을 수 있습니까? O(m + n)
시간?
파이썬
# 시간 복잡도: O(len(s) + len(t)) # 공간 복잡도: O(len(s) + len(t)) from collections import Counter, defaultdict class 솔루션: def minWindow(self, s: str, t: str) -> str: reqCount = defaultdict(int) window = defaultdict(int) 결과 = [-1, -1] resultLen = float('inf') 현재 = 0 t의 char에 대해: reqCount[char] + = 1 필요 = len(reqCount) left = 0 범위(len(s))에 대한 right의 경우: char = s[right] reqCount에 char가 있는 경우: window[char] += 1 window[char] == reqCount[char ]: 현재 += 1 현재 == 필수인 경우: 오른쪽 - 왼쪽 + 1인 경우 결과 길이 = 오른쪽 - 왼쪽 + 1인 경우 결과 길이 = [왼쪽, 오른쪽] leftChar = s[left] 창에 leftChar가 있는 경우: 창[ [leftChar] -= 1이면 window[leftChar] < reqCount[leftChar]: current -= 1 left += 1이면 s[result[0]:result[1] + 1]을 반환합니다. resultLen != float('inf')이면 그렇지 않습니다. "" S = "ADOBECODEBANC" T = "ABC" print(Solution().minWindow(S, T))