본문 바로가기
카테고리 없음

[LeetCode] 1790. Check if One String Swap Can Make Strings Equal (Python)

by zoodi 2025. 2. 5.
728x90

Problem

 

Solution

string

최대 1번만 동일한 index에 위치한 character를 swap에서 s1 == s2가 될 수 있는지 체크하는 문제

힌트 1 ) s1[i] != s2[i] 인 index 개수가 0이거나 2이어야한다.

힌트 2) 두 문자가 다른 부분이 동일한 index인지 확인해야한다.

 

나는 두 문자가 다른 부분이 몇개인지 count 하고 이 count가 0이 아니고 2가 아니면 false 를, 그리고

list에 각각 다른 문자열을 저장한뒤 sorting 해서 두 리스트에 다른 문자가 존재하면 false를 반환하도록했다.

 

<다른 사람 풀이>

class Solution:
    def areAlmostEqual(self, s1: str, s2: str) -> bool:
        if s1==s2:
            return True
        if sorted(s1)!=sorted(s2):
            return False
        count=0
        for i in range(len(s1)):
            if s1[i]!=s2[i]:
                count+=1
        if count!=2:
            return False
        return True

- 먼저 문자열이 같은지 확인

- 정렬한 문자열이 다른지 확인

- 다른 문자 개수를 count 해서 2가 아니면 false

이 풀이 방법이 불필요한 list 사용을 줄여서 더 효율적인 것 같다.

 

Code

class Solution:
    def areAlmostEqual(self, s1: str, s2: str) -> bool:
        answer = True
        cnt = 0
        if s1 == s2:
            return True

        li1 = list()
        li2 = list()

        for i in range(len(s1)):
            if s1[i] != s2[i]:
                li1.append(s1[i])
                li2.append(s2[i])
                cnt += 1

        if cnt > 0 and cnt !=2 :
            return False

        li1.sort()
        li2.sort()
       
        for i in range(len(li1)):
            if li1[i] != li2[i]:
                return False
        return answer

 

Complexity

Time Complexity

문자열 비교, for 문 순회 => O(N)

 

Space Complexity

list, 변수 사용 => O(1)

728x90

댓글