기술나눔

LeetCode 290. 단어 패턴

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

LeetCode 290. 단어 패턴

정규 패턴과 문자열 s가 주어지면 s가 동일한 정규 패턴을 따르는지 확인합니다.
여기서 준수는 완전한 일치를 의미합니다. 예를 들어, 패턴의 각 문자와 문자열 s의 비어 있지 않은 각 단어 사이에는 양방향 연결 대응이 있습니다.
예시 1:
입력: 패턴 = “abba”, s = “dog cat cat dog”
출력: 사실
예 2:
입력: 패턴 = “abba”, s = “dog cat cat fish”
출력: 거짓
예시 3:
입력: 패턴 = “aaaa”, s = “개 고양이 고양이 개”
출력: 거짓
힌트:
1 <= 패턴 길이 <= 300
패턴에 영문 소문자만 포함되어 있습니다.
1 <= s.길이 <= 3000
s에는 영문 소문자와 ' '만 포함됩니다.
s에는 선행 또는 후행 공백 쌍이 포함되어 있지 않습니다.
s의 각 단어는 단일 공백으로 구분됩니다.

해시 테이블, 전단사 관계

class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        length = len(pattern)
        sub_strs = s.split()
        if len(pattern) != len(sub_strs):
            return False
        d1, d2 = {}, {}
        for i in range(length):
            if pattern[i] in d1:
                if d1[pattern[i]] != sub_strs[i]:
                    return False
            if sub_strs[i] in d2:
                if d2[sub_strs[i]] != pattern[i]:
                    return False
            d1[pattern[i]] = sub_strs[i]
            d2[sub_strs[i]] = pattern[i]
        return True
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17