Given a pattern
and a string str
, find if str
follows the same pattern.
Examples:
- pattern =
"abba"
, str ="dog cat cat dog"
should return true. - pattern =
"abba"
, str ="dog cat cat fish"
should return false. - pattern =
"aaaa"
, str ="dog cat cat dog"
should return false. - pattern =
"abba"
, str ="dog dog dog dog"
should return false.
Notes:
pattern
contains only lowercase alphabetical letters, andstr
contains words separated by a single space. Each word instr
contains only lowercase alphabetical letters.- Both
pattern
andstr
do not have leading or trailing spaces. - Each letter in
pattern
must map to a word with length that is at least 1.
答案:
/**
* @param {string} pattern
* @param {string} str
* @return {boolean}
*/
var wordPattern = function(pattern, str) {
//返回结果
var result = true;
//分割数组
var patternArray = pattern.split("");
var strArray = str.split(" ");
if (patternArray.length != strArray.length){
result = false;
}
//数组之间的关系
var relationship = [];
var relationshipNegative = [];
//如果相等,就放入relationship数组中
//如果不相等,就放入relationshipNegative数组中
for (var i = 0; i < patternArray.length; i++) {
for (var j = 1; j < patternArray.length; j++) {
if ( i!==j ) {
if (patternArray[i] === patternArray[j]) {
relationship.push({i:i,j:j});
}
else{
relationshipNegative.push({i:i,j:j});
}
}
}
}
//判断是否符合相等关系的描述,不符合返回false
for (var k = 0; k < relationship.length; k++) {
// console.warn(strArray[relationship[k].i] !== strArray[relationship[k].j]);
if (strArray[relationship[k].i] !== strArray[relationship[k].j] ) {
// console.log("become false");
result = false;
}
}
//判断是否符合不相等关系的描述,不符合返回false
for (var h = 0; h < relationshipNegative.length; h++) {
if (strArray[relationshipNegative[h].i] === strArray[relationshipNegative[h].j] ) {
result = false;
}
}
return result;
};
原题地址:
https://leetcode.com/problems/word-pattern/