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++;
이부분에서 이전값을 계속 갱신하면서 비교하였다.
이사람은 변수 두개를 사용했고 나는 변수 하나와 자료구조 하나를 사용했다.
자료구조 보다는 변수가 더 빨랐지만 저 방법은 생각나지 않아 자료구조로 풀었다ㅠ
'프로그래밍 > LeetCode' 카테고리의 다른 글
C++ 641. Design Circular Deque(Leet Code) (0) | 2020.07.22 |
---|---|
C++ 997. Find the Town Judge(Leet Code) (0) | 2020.06.29 |
C++ 931. Minimum Falling Path Sum(Leet Code) (0) | 2020.06.26 |
C++ 1333. Filter Restaurants by Vegan-Friendly, Price and Distance(Leet Code) (0) | 2020.06.24 |
C++ 35. Search Insert Position(Leet Code) (0) | 2020.06.24 |