일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- GenAI
- Python
- 니트코드
- codeup
- slidingwindow
- nlp
- medium
- sql코테
- 코드업
- 리트코드
- gcp
- 자연어처리
- 릿코드
- two-pointer
- SQL
- Microsoft
- stratascratch
- 파이썬알고리즘
- Blazor
- dfs
- 슬라이딩윈도우
- Python3
- 생성형AI
- 알고리즘
- 파이썬
- 파이썬기초100제
- 구글퀵랩
- GenerativeAI
- LeetCode
- 투포인터
Archives
- Today
- Total
Tech for good
[Leetcode/TwoPointer] 844. Backspace String Compare 본문
IT/Computer Science
[Leetcode/TwoPointer] 844. Backspace String Compare
Diana Kang 2025. 2. 24. 00:47Two Pointers Approach (O(n) 시간, O(1) 공간)
- 뒤에서부터 문자열을 처리하면서 '#'을 만나면 백스페이스를 적용한다.
- 각 문자열에 대해 유효한 문자 위치를 찾아 비교한다.
- 포인터를 이동하면서 문자 비교를 진행한다.
class Solution:
def backspaceCompare(self, s: str, t: str) -> bool:
# 두 개의 포인터를 각각 문자열 s와 t의 끝에서 시작
i, j = len(s) - 1, len(t) - 1
# 백스페이스('#')의 개수를 추적하는 변수
back_s, back_t = 0, 0
# 두 문자열 중 하나라도 아직 탐색할 문자가 남아있는 동안 반복
while i >= 0 or j >= 0:
# 문자열 s에서 유효한 문자를 찾는 과정
while i >= 0:
if s[i] == "#": # 백스페이스를 만나면
back_s += 1 # 백스페이스 개수 증가
i -= 1 # 다음 문자로 이동
elif back_s > 0: # 백스페이스가 남아있다면 (즉, 다른 #이 더 있을 경우)
back_s -= 1 # 해당 문자 삭제 처리
i -= 1 # 다음 문자로 이동
else:
break # 유효한 문자 발견 시 중단
# 문자열 t에서 유효한 문자를 찾는 과정
while j >= 0:
if t[j] == "#": # 백스페이스를 만나면
back_t += 1 # 백스페이스 개수 증가
j -= 1 # 다음 문자로 이동
elif back_t > 0: # 백스페이스가 남아있다면
back_t -= 1 # 해당 문자 삭제 처리
j -= 1 # 다음 문자로 이동
else:
break # 유효한 문자 발견 시 중단
# 유효한 문자 위치에서 비교 (둘 다 유효한 문자일 때)
if i >= 0 and j >= 0 and s[i] != t[j]:
return False # 서로 다르면 False 반환
# 한쪽 문자열이 먼저 끝난 경우(False)
if (i >= 0) != (j >= 0):
return False
# 다음 문자 비교를 위해 포인터 이동
i -= 1
j -= 1
# 모든 문자가 동일하면 True 반환
return True
코드 흐름 정리
- 문자열 끝에서 시작하는 두 개의 포인터 사용 (i, j)
- s와 t의 마지막 문자부터 비교해 나간다.
- 백스페이스 처리
- #을 만나면 백스페이스 개수를 증가 (back_s, back_t).
- # 개수가 남아 있으면 현재 문자를 무시하고 지나감.
- 문자 비교
- 백스페이스가 적용된 후의 문자가 다르면 False 반환.
- 한쪽 문자열이 먼저 끝나면 False 반환.
- 반복하며 모든 문자 처리 후 True 반환
- 끝까지 모든 문자가 동일하면 True 반환.
시간 및 공간 복잡도
- 시간 복잡도: O(n)
→ 모든 문자를 한 번씩 탐색하므로 선형 시간에 해결. - 공간 복잡도: O(1)
→ 추가 메모리를 사용하지 않고 포인터만 사용.
'IT > Computer Science' 카테고리의 다른 글
[Leetcode/Sliding Window] 643. Maximum Average Subarray I (0) | 2025.02.25 |
---|---|
[Leetcode/Sliding Window, HashMap] 219. Contains Duplicate II (0) | 2025.02.24 |
[Leetcode/TwoPointer] 2825. Make String a Subsequence Using Cyclic Increments (0) | 2025.02.22 |
[Leetcode/TwoPointer] 345. Reverse Vowels of a String (0) | 2025.02.21 |
[NeetCode 150/String Manipulation,TwoPointer] Valid Palindrome (0) | 2025.02.21 |