본문 바로가기

자료구조,알고리즘

LeetCode-290 Word Pattern 파이썬 풀이

 

Word Pattern - LeetCode

Can you solve this real interview question? Word Pattern - Given a pattern and a string s, find if s follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s.   Example

leetcode.com

문제

pattern과 s의 구조가 같은지 판별하는 문제입니다. 문자열 pattern이 반복되는 구조가 s에서 단어가 반복되는 구조와 같은지 판별하면 됩니다.

풀이

1. 이전 게시글에서 풀었던 것과 마찬가지로 pattern과 s에서 새로운 문자 / 단어를 발견할 때마다 각 patternA 와 patternB에 저장해줍니다. 

2. 결과 배열에도 새로운 문자를 의미하는 숫자를 추가합니다.

3. 만약 새로운 문자일 경우 현재까지의 patternA 혹은 patternB의 길이가 해당 문자를 의미하는 숫자가 됩니다.

4. 만약 기존에 마주쳤던 문자일 경우 patternA 혹은 patternB에서 해당 인덱스를 찾아 result에 추가합니다.

5. resultA와 B를 비교하여 같으면 True를 다르면 False를 반환합니다.

class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        sArr = s.split()
        if len(pattern) != len(sArr): return False
        patternA = []
        patternB = []
        resultA, resultB = [], []
        for i in range(len(pattern)):
            if pattern[i] not in patternA:
                resultA.append(len(patternA))
                patternA.append(pattern[i])
            else:
                resultA.append(patternA.index(pattern[i]))
            if sArr[i] not in patternB:
                resultB.append(len(patternB))
                patternB.append(sArr[i])
            else:
                resultB.append(patternB.index(sArr[i]))
        if resultA == resultB:
            return True
        else:
            return False