题目:Word Pattern
Given a pattern and a string str, find if str follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.
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:
You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.
题目分析:
- 字符串结构相似
- 方法:将两个字符串都转化为用数字表达的字符串,相同的字符用相同的数字来表示;最后判断两个字符串转换后的数字字符串是否相同
代码:
- Javascript:
/**
* @param {string} pattern
* @param {string} str
* @return {boolean}
*/
var wordPattern = function(pattern, str) {
var arr_1=pattern.split("");
var arr_2=str.split(" ");
var str1=convert(arr_1);//将patter转换为数字字符串
var str2=convert(arr_2);//将str转换为数字字符串
if(str1==str2)//比较两个数字字符串相同时候返回true
{
return true;
}
else
{
return false;
}
};
function convert(arr)//转换函数 将字符串转换为例如0110这样的字符串其中相同的数字代表相同的字符
{
//var arr=str.split("");
var tempArr=new Array();
var a=0;
var s1='';
for(var i=0;i<arr.length;i++)
{
if(tempArr.indexOf(arr[i])==-1)//如果数组中不存在arr[i]那么将字符放入数字,将字符的下标与对应转换的数字对应起来
{
tempArr.push(arr[i]);
s1+=''+a;
a++;
}
else//如果数组中已经存在了arr[i]那么字符用其数组中的下标代替
{
s1+=''+tempArr.indexOf(arr[i]);
}
}
return s1;
}