Buddy Strings

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

- 문제 내용 : 주어진 두 문자열중에 한 문자열의 2글자를 교환해서 동일한 문자를 만들 수 있는지 알아내라

 

- 접근 방법

문제의 Rule을 찾아야 한다.

쉬운 문제이기 때문에 크게 설명할 것은 없는데, 단지 알파벳 26자를 이용한 memorization을 통해 접근 하는 방법을 눈여겨 보면 좋을 것이라고 생각한다.

근본적으로 어떻게 문자의 구성이 되든 알파벳의 각 출현 빈도수는 무조건 같아야지만 해당 문제가 true일 가능 성이 있다는 점을 착안 하면 좋을 것 같다.

var buddyStrings = function(A, B) {
    if(A.length !== B.length || A.length < 2 || B.length < 2) return false;
    let aChar = new Array(26).fill(0);
    let bChar = new Array(26).fill(0);

    let diffCount = 0;

    for (let i = 0; i < A.length; i++) {
        aChar[A.charCodeAt(i) - 'a'.charCodeAt(0)]++;
        bChar[B.charCodeAt(i) - 'a'.charCodeAt(0)]++;
        if(A.charCodeAt(i) !== B.charCodeAt(i)){
            diffCount++;
        }
    }

    if(!(diffCount === 2 || diffCount === 0)) return false;

    let overCount = false;

    for (let i = 0; i < 26; i++) {
        if(aChar[i] !== bChar[i]) return false;
        if(1 < aChar[i]) overCount = true;
    }

    if(diffCount === 2){
        return true;
    } else {
        if(overCount) return true;
        else return false;
    }
};

여기서 overCount의 경우는 모든 chars가 동일하다면 동일한 char가 2개 이상 있어야만 본 문제를 통해 true 처리가 가능하다.

728x90
반응형

'Problem Solving' 카테고리의 다른 글

Basic Calculator  (0) 2021.04.27
Trapping Rain Water  (0) 2021.04.24
Count Subtrees With Max Distance Between Cities  (0) 2020.10.12
Two Sum III - Data structure design  (0) 2020.10.10
Serialize and Deserialize BST  (0) 2020.10.09