aboutsummaryrefslogtreecommitdiff
path: root/racket/leetcode/lc-290-word-pattern.rkt
blob: 77cdba09a56c5f393150828ebe8fbb3f3e6286a1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#lang racket
(define match-string "abba")
(define a "dog")
(define b "cat")
(define Σ "dog cat cat dog")

(define/contract (word-pattern pattern s)
  (-> string? string? boolean?)
  (define pattern-list (map string (string->list pattern)))
  (define s-list (string-split s))
  (define match-hash (make-hash))
  (if (= (length pattern-list) (length s-list))
      (for/and ([pattern-part pattern-list]
                [s-part s-list])
        (cond [(and (not (hash-has-key? match-hash pattern-part))
                    (member s-part (hash-values match-hash))) #f]
              [(not (hash-has-key? match-hash pattern-part))
               (hash-set! match-hash pattern-part s-part) #t] 
              [(string=? (hash-ref match-hash pattern-part) s-part) #t]
              [else #f]))
      #f))

(word-pattern match-string Σ)