내 학점 (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