내 학점 (C++)
[C++] Is Subsequence
z_zen
2025. 12. 8. 23:39
728x90
문제 - LeetCode 392. Is Subsequence
https://leetcode.com/problems/is-subsequence/description/?envType=study-plan-v2&envId=leetcode-75
문자열 s가 문자열 t의 *subsequence(부분 수열)*인지 확인하는 문제입니다.
부분 수열은 원본 문자열에서 일부 문자를 삭제하여 만들 수 있는 문자열로,
남아 있는 문자들의 상대적 순서가 변하지 않아야 합니다.
예를 들어,
- "abcde" → "ace" 가능 ✔
- "abcde" → "aec"은 순서가 뒤섞여서 불가능 ✘
투 포인터 동작 방식 예시
s = "abc"
t = "ahbgdc"
i s[i] j t[j] match? 동작
| 0 | a | 0 | a | ✔ | i++, j++ |
| 1 | b | 1 | h | ✘ | j++ |
| 1 | b | 2 | b | ✔ | i++, j++ |
| 2 | c | 3 | g | ✘ | j++ |
| 2 | c | 4 | d | ✘ | j++ |
| 2 | c | 5 | c | ✔ | i++ |
결과적으로 i == s.length(),
즉 s의 모든 문자를 순서대로 찾았으므로 subsequence 성립 → true
코드
class Solution {
public:
bool isSubsequence(string s, string t) {
int i = 0, j = 0;
while (i < s.size() && j < t.size()) {
if (s[i] == t[j]) {
i++;
}
j++;
}
return i == s.size();
}
};
728x90