Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- IAM
- github
- 자바스크립트
- POD
- asgi
- Deployment
- FastAPI
- K8S
- YAML
- IAC
- DevOps
- ebs
- 쿠버네티스
- Service
- AWS
- Python
- terraform
- Kubernetes
- asyncio
- WSGI
- leetcode
- ansible
- docker
- event loop
- elasticsearch
- Django
- intervals
- EKS
- dockerfile
- EC2
Archives
- Today
- Total
궁금한게 많은 개발자 노트
[ leetcode ] 859. Buddy Strings 본문
두 string이 주어졌을 때, 서로 다른 두 위치의 값들을 한번만 바꿔 같은 string이 될 수 있으면 true를 return하고 그렇지 않으면 false를 return하는 문제입니다.
크게 두 가지 갈래로 나눌 수 있습니다. 두 string이 모두 같은 경우와 그렇지 않은 경우가 있습니다.
1. 두 string 같은 경우는 같은 문자가 포함되어 있지 않다면, 두 자리를 변경하면 같아질 수 없습니다.
같은 문자가 포함된 경우를 판단하는 것은 set을 사용하여 기존 문자열과 길이가 달라지는 것으로 판단 가능합니다.
2. 다른 경우는 two point로 양쪽에서 index를 출발하여 같은 자리를 비교하며 같지 않은 index를 각각 저장해두고 그 두 자리를 변경했을 때 같지 않다면 같은 문자열을 만들 수 없다고 판단합니다.
#include <set>
#define swap(a,b,t)((t) = (a), (a) = (b), (b) = (t))
class Solution {
public:
bool buddyStrings(string s, string goal) {
if (s == goal) { // 같은 문자열인 경우
set<char> temp(s.begin(), s.end());
return temp.size() < goal.size(); // 같은 문자 포함 시 길이가 줄어듦
}
int i = 0, j = goal.length() - 1, t;
while (i < j && s[i] == goal[i]) i++; // 서로 다른 인덱스 두가지를 찾아서 변경
while (j >= 0 && s[j] == goal[j]) j--;
swap(s[i], s[j], t);
return s == goal;
}
};
'Algorithm' 카테고리의 다른 글
[ leetcode ] 104. Maximum Depth of Binary Tree (0) | 2023.07.07 |
---|---|
[ leetcode ] 24. Swap Nodes in Pairs (0) | 2023.07.07 |
[ leetcode ] 112. Path Sum (0) | 2023.05.09 |
[ leetcode ] 78. Subsets (0) | 2023.05.02 |
[ leetcode ] 57. Insert Interval (0) | 2023.05.02 |
Comments