Skip to content

单词规律 / wordPattern

题目描述

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。

Code

javascript
function wordPattern(pattern, s) {
  const arr = s.split(' ');
  if (pattern.length !== arr.length) return false;
  const map = new Map();
  const map1 = new Map();
  for (let i = 0; i < pattern.length; i++) {
    const key = pattern[i];
    if (map.has(key)) {
      if (map.get(key) !== arr[i]) {
        return false;
      }
    } else {
      if (map1.has(arr[i])) {
        return false;
      } else {
        // 添加到反向映射
        map1.set(arr[i], s[i]);
      }
      map.set(key, arr[i]);
    }
  }
  return true;
}

Test Cases

javascript
const { wordPattern } = require('../docs/algo/string/wordPattern');

describe('wordPattern', () => {
  it('case1', () => {
    expect(wordPattern('abba', 'dog cat cat dog')).toBeTruthy();
  });
  it('case2', () => {
    expect(wordPattern('abba', 'dog cat cat fish')).toBeFalsy();
  });
  it('case3', () => {
    expect(wordPattern('aaaa', 'dog cat cat dog')).toBeFalsy();
  });
  it('case4', () => {
    expect(wordPattern('abba', 'dog dog dog dog')).toBeFalsy();
  });
  it('case5', () => {
    expect(wordPattern('aaa', 'dog dog dog dog')).toBeFalsy();
  });
});