반응형
SMALL
https://leetcode.com/problems/buddy-strings/solution/
본 문제는 문자열 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 |