Appearance
单词规律 / 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();
});
});