본문 바로가기
프로그래밍/LeetCode

C++ 925. Long Pressed Name(Leet Code)

by devsu 2020. 6. 27.

Leet Code_925. Long Pressed Name

two pointers

 

https://leetcode.com/problems/long-pressed-name/

 

문제 해석

 

이 문제를 풀기위해 이해해야 할 내용은 다음과 같습니다.

 

목표

입력 string 값과 주어진 typed string 값이 입력될 수 있는 string인지 판별하기

방법

1. 길게 누를 수 있고 그런 경우 한번더 입력이 된다.(a를 long pressed 한 경우 aa)

 

결과

입력 string 값과 주어진 typed string 값이 입력될 수 있는 string인지 판별하기

 

통과한 코드

class Solution {
public:
    bool isLongPressedName(string name, string typed) {
        int n = 0;
    stack<char> arr;
    for (int i = 0; i < typed.size(); i++)
    {
        if (name[n] == typed[i])
        {
            while(!arr.empty() && arr.top() != name[n])
                arr.pop();
            arr.push(name[n]);
            n++;
        }
        else if (!arr.empty() && arr.top() == typed[i])
        {
            arr.pop();
        }
        else
            return false;
    }
    if (name[name.size() - 1] != typed[typed.size() - 1])
        return false;
    return true;
    }
};

stack 자료구조를 사용하여 이전값과 비교할 수 있도록 구현하였다.

처음에는 그냥 char 자료형 하나로 이전값만 비교했었지만 같은 문자가 연속으로 2번 나오는 경우(aa이면 aaaa까지 가능) 판별이 불가능하여 stack 구조로 이전 값을 계속 넣어 비교하였다.(이전 값과 지금 넣는 값이 다른경우에는 stack을 비우기)

 

다른 사람 코드

class Solution {
public:
    bool isLongPressedName(string name, string typed) {
        int i = 0, k = 0;
        
        while (i < typed.length() and k < name.length()) {
            if (typed[i] == name[k])
                i++, k++;
            
            else if (i > 0 and typed[i] == typed[i-1])
                while (typed[i] == typed[i-1])
                    i++;
            
            else
                return false;
        }
        
        if (k < name.length())
            return false;
        
        while (i < typed.length())
            if (typed[i++] != name.back())
                return false;
        
        return true;
    }
};

else if (i > 0 and typed[i] == typed[i-1])

   while (typed[i] == typed[i-1])

     i++;

이부분에서 이전값을 계속 갱신하면서 비교하였다.

 

이사람은 변수 두개를 사용했고 나는 변수 하나와 자료구조 하나를 사용했다.

자료구조 보다는 변수가 더 빨랐지만 저 방법은 생각나지 않아 자료구조로 풀었다ㅠ