Word Pattern

EasyHash TableString

Solution

import { range } from '@algorithm/lib';
 
export function wordPattern(patterns: string, s: string): boolean {
  const n = patterns.length;
  const words = s.split(' ');
  const wordToPattern = new Map<string, string>();
 
  if (patterns.length !== words.length) {
    return false;
  }
 
  if (new Set(patterns).size !== new Set(words).size) {
    return false;
  }
 
  for (const i of range(n)) {
    const [word, pattern] = [words[i], patterns[i]];
    if (!wordToPattern.has(word)) {
      wordToPattern.set(word, pattern);
    } else if (wordToPattern.get(word) !== pattern) {
      return false;
    }
  }
 
  return true;
}