290.word-pattern.go 434 B

1234567891011121314151617181920212223
  1. func wordPattern(pattern string, str string) bool {
  2. words := strings.Split(str, " ")
  3. if len(words) != len(pattern) {
  4. return false
  5. }
  6. r2s := make(map[rune]string)
  7. s2r := make(map[string]rune)
  8. for i, p := range pattern {
  9. if s, ok := r2s[p]; ok {
  10. if s != words[i] {
  11. return false
  12. }
  13. }
  14. if r, ok := s2r[words[i]]; ok {
  15. if r != p {
  16. return false
  17. }
  18. }
  19. r2s[p] = words[i]
  20. s2r[words[i]] = p
  21. }
  22. return true
  23. }