func wordPattern(pattern string, str string) bool { words := strings.Split(str, " ") if len(words) != len(pattern) { return false } r2s := make(map[rune]string) s2r := make(map[string]rune) for i, p := range pattern { if s, ok := r2s[p]; ok { if s != words[i] { return false } } if r, ok := s2r[words[i]]; ok { if r != p { return false } } r2s[p] = words[i] s2r[words[i]] = p } return true }