본문 바로가기

Algorithm/String

(C++) - LeetCode (easy) 859. Buddy Strings

반응형

https://leetcode.com/problems/buddy-strings/description/

 

Buddy Strings - LeetCode

Can you solve this real interview question? Buddy Strings - Given two strings s and goal, return true if you can swap two letters in s so the result is equal to goal, otherwise, return false. Swapping letters is defined as taking two indices i and j (0-ind

leetcode.com

문자열을 다뤄보는 문제였습니다.

📕 풀이방법

📔 풀이과정

여러 경우의 수가 있습니다.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];
    }
};

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.