-
2021-01-22] Determine if Two Strings Are CloseIT/자기계발 ( Leetcode ) 2021. 1. 22. 21:54반응형
오늘의 문제:
오늘은 금요일!! 불금이지만 문제풀이로 오늘을 불태운다면 발전하는 나를 볼수있을것이다..
이번 문제에서 주어진 Operation 2개에 대해서 이야기를 하자.
입력값으로 주어지는 2개의 문자열에서 하나의 문자열을 Operation 1,2를 사용하여 동일하게 만들 수 있으면
두 문자열은 가깝다고 생각하고 가까우면 True, 문자열이 동일해지지 않으면 False 를 반환하는 문제이다.
Operation 1: 문자열에서 두 문자를 위치 변경이 가능하다. ( b -> e / e -> b )
Operation 2: 동일한 문자가 있으면 그것까지 전부 바뀌는 문자로 변환 ( aaa -> bbb / bb -> aa )
예시 1) 'abc' / 'bca' abc를 문자 순서를 두번 바꾸면 bca가 되므로 두 문자열은 가까워 반환값은 True
예시 2) 'a' / 'aa' a를 operation 1,2로 뭘 해봐도 aa가 될수 없다.
예시 3) 'cabbba' / 'abbccc' 문자 순서를 한번 바꾸고, 여러개 바꾸는 방법으로 변경하면 가까워질 수 있다.
예시 4) 'cabbba' / 'aabbss' 문자열이 가진 문자의 종류가 다르므로, 'ss'를 첫번째 문자열이 가질 수 없어 False
알게된 실패조건들은 다음과 같다.
1) 주어진 문자열 두개의 길이가 다르면 무조건 False
2) 주어진 문자열에 존재하는 문자 종류 및 문자의 개수가 다르면 False
즉 , 'aaabbb' / 'bababa' 를 분석해보면 두 문자열 모두 a: 3, b: 3 으로 구성되어 operation 1로 동일하게 가능
'aabbccc' / 'ccaabbb'는 a:2, b:2, c:3 / c:2, a:2, b:3 으로 다른 것 처럼 보이지만, operation1, 2를 적절히 쓰면 가능
'aaabccc' / 'aabbcc'는 a:3, b:1, c:3 / a:2, b:2, c:2 으로 종류는 같지만 개수가 달라 불가능
나는 많은 memory를 사용하고, sort가 많아 runtime도 길긴했지만, 아래와 같이 짤 수 있었다.
문제풀이)
class Solution: def closeStrings(self, word1: str, word2: str) -> bool: if len(word1)!=len(word2): # 종단조건 1 : 두 문자열의 길이가 다르면 False return False w1dict=dict() w2dict=dict() for i in range(len(word1)): # 두 문자열이 같으로 for문은 하나만 사용 d1=word1[i] d2=word2[i] if d1 in w1dict: w1dict.update({d1:w1dict[d1]+1}) # dictionary로 문자가 몇번나왔는지 저장 else: w1dict[d1]=1 if d2 in w2dict: w2dict.update({d2:w2dict[d2]+1}) else: w2dict[d2]=1 w1keys=sorted(list(w1dict.keys())) # 각 저장한 word들의 keys와 values를 정렬하여 저장 w2keys=sorted(list(w2dict.keys())) w1list=sorted(list(w1dict.values())) w2list=sorted(list(w2dict.values())) #print(w1list,w2list) if w1list==w2list and w1keys==w2keys: # 이 정렬된 내용이 둘다 같다면 True return True return False
반응형'IT > 자기계발 ( Leetcode )' 카테고리의 다른 글
2021-01-24] Merge k Sorted Lists (0) 2021.01.24 2021-01-23] Sort the Matrix Diagonally (0) 2021.01.23 2021-01-21] Find the Most Competitive Subsequence (0) 2021.01.22 2021-01-20] Valid Parentheses (0) 2021.01.20 2021-01-19] Longest Palindromic Substring (0) 2021.01.19