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
댓글