개발여행의 블로그

[leetcode] 859. Buddy Strings solution(문제 풀이) 본문

개발/Algorithm

[leetcode] 859. Buddy Strings solution(문제 풀이)

개발 여행 2021. 8. 21. 14:55
728x90

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

 

Buddy Strings - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

<Problem>

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-indexed) such that i != j and swapping the characters at s[i] and s[j].

  • For example, swapping at indices 0 and 2 in "abcd" results in "cbad".

 

Example 1:

Input: s = "ab", goal = "ba" Output: true

Explanation: You can swap s[0] = 'a' and s[1] = 'b' to get "ba", which is equal to goal.

 

Example 2:

Input: s = "ab", goal = "ab" Output: false

Explanation: The only letters you can swap are s[0] = 'a' and s[1] = 'b', which results in "ba" != goal.

 

Example 3:

Input: s = "aa", goal = "aa" Output: true

Explanation: You can swap s[0] = 'a' and s[1] = 'a' to get "aa", which is equal to goal.

 

Example 4:

Input: s = "aaaaaaabc", goal = "aaaaaaacb" Output: true

 

Constraints:

  • 1 <= s.length, goal.length <= 2 * 104
  • s and goal consist of lowercase letters.

 

<Solution>

const buddyStrings = function(s, goal) {
    if (s.length != goal.length || s.length < 2 || goal.length < 2) {
        return false;    
    }
    
    if (s === goal)  {
        const setStr = new Set(s.split(''));
        return setStr.size < s.length;
    }
    
    const difIndex = [];
    for (let i = 0; i < s.length; i++) {
        if (s[i] != goal[i]) {
            difIndex.push(i);
        }
        if (difIndex.length > 2) {
            return false;    
        }
    }
    
    return s[difIndex[0]] === goal[difIndex[1]] && s[difIndex[1]] === goal[difIndex[0]];
    
};

 

<Explanation>

1. 문자열 s와 goal의 길이가 다르면 두 개의 문자의 자리를 바꾸어도 같아질 수 없기 때문에 바로 false를 return 하는 if statement를 추가해주었다.

 

2. s와 goal의 문자열이 같은 경우, s에 동일한 알파벳의 문자가 있어야 goal과 같이 만들 수 있다.

예를 들어 s = 'abc', goal = 'abc'라면 두 개의 알파벳의 자리를 바꾸어서 goal과 동일한 문자를 만들 수 없다.

set을 사용해서 중복 문자열을 제외하고 set의 length와 s의 length를 비교해서 boolean값을 return

 

3. 길이가 같은 문자열이 매개변수로 전달될 경우, s의 문자열 앞에서부터 goal의 문자열과 비교해 문자가 다른 곳의 index를 difIndex에 저장해둔다. 다른 문자가 3개이면 문자의 자리를 변경해도 같아질 수 없으므로 if statement를 추가해주었다. difIndex에 저장된 index 값으로 s의 문자열과 goal의 문자열이 같은지 판별하는 연산을 return문에 추가하였다.

 

728x90
Comments