LeetCode-in-Go

290. Word Pattern

Easy

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 1:

Input: pattern = “abba”, s = “dog cat cat dog”

Output: true

Example 2:

Input: pattern = “abba”, s = “dog cat cat fish”

Output: false

Example 3:

Input: pattern = “aaaa”, s = “dog cat cat dog”

Output: false

Example 4:

Input: pattern = “abba”, s = “dog dog dog dog”

Output: false

Constraints:

Solution

import "strings"

func wordPattern(pattern string, s string) bool {
	words := strings.Split(s, " ")
	if len(words) != len(pattern) {
		return false
	}
	charToWord := make(map[rune]string)
	wordToChar := make(map[string]rune)
	for i, char := range pattern {
		word := words[i]
		if mappedWord, exists := charToWord[char]; exists {
			if mappedWord != word {
				return false
			}
		} else {
			if _, exists := wordToChar[word]; exists {
				return false
			}
			charToWord[char] = word
			wordToChar[word] = char
		}
	}
	return true
}