반응형
https://leetcode.com/problems/buddy-strings/description/
문자열을 다뤄보는 문제였습니다.
📕 풀이방법
📔 풀이과정
여러 경우의 수가 있습니다.1. s와 goal의 길이가 다르면 false를 반환합니다.2. s와 goal 문자열이 같을 때는 고유한 문자개수를 세줍니다. 고유한 문자개수가 s길이보다 작다면 두 개 이상 겹치는 문자를 가지고 있다는 의미이므로 true를 반환합니다. 아니라면 false를 반환합니다.3. 다른 문자의 개수를 세줄 diff와 문자가 첫 번째와 두 번째로 다른 경우 해당 index를 각각 firstDiffIdx, secondDiffIdx를 선언해 s문자를 확인하며 goal과 다른 경우 알맞게 값을 저장해줍니다.4. s와 goal의 다른문자 개수가 2개며 swap가능하도록 서로의 문자가 같다면 true를 아니면 false를 반환합니다.
📕 Code
📔 C++
class Solution {
public:
bool buddyStrings(string s, string goal) {
if(s.size() != goal.size()) return false;
if(s == goal) {
set<char> unique_chars(s.begin(), s.end());
return unique_chars.size() < s.size();
}
int diff = 0;
int firstDiffIdx = -1, secondDiffIdx = -1;
for(int i = 0; i < s.size(); i++) {
if(s[i] == goal[i]) continue;
diff++;
if(firstDiffIdx == -1) firstDiffIdx = i;
else secondDiffIdx = i;
}
return diff == 2 && s[firstDiffIdx] == goal[secondDiffIdx] && s[secondDiffIdx] == goal[firstDiffIdx];
}
};
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > String' 카테고리의 다른 글
(C++, Rust) - LeetCode (easy) 917. Reverse Only Letters (0) | 2023.08.31 |
---|---|
(C++) - LeetCode (easy) 868. Binary Gap (0) | 2023.08.04 |
(C++) - LeetCode (easy) 844. Backspace String Compare (0) | 2023.07.31 |
(C++) - LeetCode (easy) 824. Goat Latin (0) | 2023.07.24 |
(C++) - LeetCode (easy) 819. Most Common Word (0) | 2023.07.20 |