-
[Two Pointer] 392. Is SubsequenceSW 정글/알고리즘 2024. 10. 23. 22:26
https://leetcode.com/contest/leetcode-weekly-contest-3/problems/is-subsequence/
Given two strings s and t, return true if s is a subsequence of t, or false otherwise.
A subsequence of a string is a new string that is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (i.e., "ace" is a subsequence of "abcde" while "aec" is not).
Example 1:
Input: s = "abc", t = "ahbgdc" Output: true
Example 2:
Input: s = "axc", t = "ahbgdc" Output: false
Constraints:
- 0 <= s.length <= 100
- 0 <= t.length <= 104
- s and t consist only of lowercase English letters.
class Solution: def isSubsequence(self, s: str, t: str) -> bool: #s를 split 후 t를 앞에서부터 순회하면서 찾다가 일치하면 다음 탐색 (대신 인덱스도 위치도 동일하게) i, j = 0, 0 #포인터 초기화 while i < len(s) and j < len(t): if s[i] == t[j]: i += 1 j += 1 #true, false만 반환하므로 i가 전체 s의 길이와 동일할 때까지 증가하면 모두 찾았다는 의미 return i == len(s) #True
while i < len(s) and j < len(t):
1. s의 길이가 남아있는 동안만 t를 순회하도록 1차로 걸 수 있는 조건
if s[i] == t[j]: i += 1 j += 1
2. 일치할 경우 둘다 인덱스 +1부터 시작하도록 거는 조건
👩🌾j 인덱스를 증가시키는 로직을 i의 증가 로직과 다른 들여쓰기 수준에서 진행하는 이유
1. i 인덱스 관리: i 인덱스는 문자열 s의 문자가 문자열 t에서 일치할 때만 증가한다. 문자열 s의 다음 문자를 찾기 위해 t에서 계속 탐색을 진행해야 함을 의미한다.
2. j 인덱스 관리: j는 문자열 t를 순회하는 인덱스로서, 문자열 t의 모든 문자를 확인하면서 s의 문자와 일치하는지 여부를 각 위치에서 검사하는데, j 인덱스의 증가는 조건과 무관하게 항상 일어나야 한다.
따라서 if 문의 외부에서 처리되어 t의 각 문자를 확인할 때마다 j가 무조건 1씩 증가해야 한다.
'SW 정글 > 알고리즘' 카테고리의 다른 글
[stack] 20. Valid Parentheses (0) 2024.10.23 [String] 14. Longest Common Prefix / startswith() 함수 (0) 2024.10.23 [String] 412. Fizz Buzz (0) 2024.10.23 [math] 7. Reverse Integer (0) 2024.10.23 [math] 9. Palindrome-number (0) 2024.10.23