Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 파이썬 알고리즘 풀기
- 릿코드 풀기
- python Leetcode
- 알고리즘풀기
- 상가수익률계산기
- 파이썬알고리즘풀기
- 릿코드풀이
- leetcode풀이
- 파이썬알고리즘
- leetcode 풀기
- python 릿코드
- binary search
- python priority queue
- LeetCode
- 파이썬 릿코드
- 파이썬릿코드풀기
- 릿코드
- leetcode풀기
- python 알고리즘
- 잇츠디모
- python sorted
- 릿코드풀기
- 코틀린기초
- python xor
- 파이썬릿코드
- 파이썬 알고리즘
- 파이썬 프로그래머스
- 알고리즘풀이
- 릿코드 파이썬
- python zip_longest
Archives
- Today
- Total
소프트웨어에 대한 모든 것
LeetCode 풀기 - 567. Permutation in String 본문
반응형
567. Permutation in String
https://leetcode.com/problems/permutation-in-string/
문제)
솔루션1)
스트링 매칭 문제입니다.
슬라이딩 윈도우 방식을 통해서 문제를 해결합니다.
s1의 각 문자의 수를 세어서 윈도우 사이즈 만큼 s2에서 동일한 count 패턴이 나오는지 체크합니다.
# Sliding Window
class Solution:
def checkInclusion(self, s1: str, s2: str) -> bool:
# 문자 -> 숫자 변환
l1 = list(map(lambda x: ord(x) - ord('a'), s1))
l2 = list(map(lambda x: ord(x) - ord('a'), s2))
# s1 문자 카운트
target = [0] * 26
for x in l1:
target[x] += 1
# 초기 윈도우
window = [0] * 26
for i, x in enumerate(l2):
# 윈도우 업데이트
window[x] += 1
if i >= len(l1):
# 윈도우 사이즈 범위를 넘어가는 이전 count 감소
window[l2[i - len(l1)]] -= 1
if target == window:
return True
return False
솔루션2)
솔루션1 방식이 슬라이딩 윈도우를 list 형태를 유지해서 해결했다면 여기서는 해쉬를 이용합니다.
class Solution:
def checkInclusion(self, s1: str, s2: str) -> bool:
target = collections.Counter(s1)
window = collections.Counter(s2[:len(s1)])
start = 0
end = len(s1)
while end < len(s2):
if target == window:
return True
# decrease
window[s2[start]] -= 1
# Remove zero item
if window[s2[start]] == 0:
del window[s2[start]]
# increase
window[s2[end]] = window.get(s2[end], 0) + 1
# move
start += 1
end += 1
return target == window
반응형
'알고리즘 > LeetCode' 카테고리의 다른 글
LeetCode 풀기 - 102. Binary Tree Level Order Traversal (0) | 2021.11.20 |
---|---|
LeetCode 풀기 - 733. Flood Fill (0) | 2021.11.17 |
LeetCode 풀기 - 3. Longest Substring Without Repeating Characters (0) | 2021.11.16 |
LeetCode 풀기 - 19. Remove Nth Node From End of List (0) | 2021.11.15 |
LeetCode 풀기 - 876. Middle of the Linked List (0) | 2021.11.15 |
Comments