Problem : https://leetcode.com/problems/uncommon-words-from-two-sentences
Difficulty : Easy
Status : Solved
Time : 00:08:23
더보기
번역
여기서 문장이란, 알파벳 소문자로 이루어진 단어들이 스페이스바 공백 하나로 구분되는 문자열을 의미한다.
또한 어떤 단어가 한 문장에서 오직 딱 한번 나타나고, 다른 문장에서는 나타나지 않을 때 그 단어를 평범하지 않다고 하자.
문장 s1, s2가 주어졌을때, s1과 s2 안의 평범하지 않은 단어 리스트를 반환하라. 단어의 순서는 상관이 없다.
오랫만의 풀이가 되었다. 일에 이리 치이고 저리 치이다보니 이렇게 늦어졌다.
핵심은 uncommon을 빠르게 구하는 것이 될 텐데, 각 문장을 한 번이라도 등장한 단어(s), 한 번만 등장한(u) 단어 집합을 구한다고 가정하자.
그렇다면 s1 기준으로 uncommon한 단어는 (s1에서 한 번이라도 등장하고), (s2에서 한 번도 등장하지 않아야 한다). 즉 둘의 차집합을 구하는 셈이다. s2 기준으로도 동일하다. (s2에서 한 번이라도 등장하고), (s1에서 한 번도 등장하지 않아야 한다).
즉 수식으로 적으면 UNION((u1 - s2), (u2 - s1))가 되는 셈이고, 이에 맞게 구현만 해주면 된다.
풀이 코드
class Solution:
def findUniqueWord(self, s: str):
visit = set()
unique = set()
for _s in s.split() :
if _s in visit :
unique.discard(_s)
else :
unique.add(_s)
visit.add(_s)
return visit, unique
def uncommonFromSentences(self, s1: str, s2: str) -> List[str]:
s1_visit, s1_unique = self.findUniqueWord(s1)
s2_visit, s2_unique = self.findUniqueWord(s2)
return list(s1_unique.difference(s2_visit).union(
s2_unique.difference(s1_visit)))