본문 바로가기

알고리즘 문제 풀이/LeetCode

859. Buddy Strings

반응형
SMALL

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

 

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

본 문제는 문자열 A, B가 주어졌을 때, 한 쌍의 문자를 바꾸는 것으로 두 문자열이 같을 수 있는지를 확인하는 문제입니다.

 

이 전 문제 non-decreasing에서 한 번 호되게 당한 적이 있기에 이번 문제에서는 경우를 세세하게 나누어서 if 문으로 처리를 해주었습니다.

class Solution(object):
    def buddyStrings(self, A, B):
        """
        :type A: str
        :type B: str
        :rtype: bool
        """
        # They must have same words.
        arr_A = [0 for _ in xrange(123)]
        arr_B = [0 for _ in xrange(123)]
        for word in A:
            arr_A[ord(word)] += 1
        for word in B:
            arr_B[ord(word)] += 1
        for idx in xrange(len(arr_A)):
            if arr_A[idx] != arr_B[idx]:
                return False
            
        # Compare A, B
        dif = 0
        for idx in xrange(len(A)):
            if A[idx] != B[idx]:
                dif += 1
        if dif == 2:
            return True
        elif dif == 0:
            for val in arr_A:
                if val >= 2:
                    return True
        return False

우선 A, B가 같은 소문자 갯수를 가지고 있어야 합니다. 다르면 아예 다른 문자니까요.

 

그리고 두 문자열을 비교합니다. 여기서 다른 부분이 2개가 있거나 0개가 있어야 합니다. 2개면 서로를 바꿔주면 되는거고 0개면 또다른 처리가 필요해집니다.

 

0개면 저희는 문자열에 같은 문자가 2개 이상 있는지를 확인해야합니다. 그 두 개를 바꾸면 같은 문자가 되니까요.

 

이 과정을 다 거쳤는데도 다르면 두 문자열은 같아질 수 있는 방법이 존재하지 않으면서 False를 return 하면 됩니다.

 

쉽네요.


이상 859. Buddy Strings였습니다. ^_^

반응형
LIST

'알고리즘 문제 풀이 > LeetCode' 카테고리의 다른 글

581. Shortest Unsorted Continuous Subarray  (0) 2020.04.16
414. Third Maximum Number  (0) 2020.04.15
665. Non-decreasing Array  (0) 2020.04.14
9. Palindrome Number  (0) 2020.04.13
7. Reverse Integer  (0) 2020.04.12