题目
给定一种规律
pattern
和一个字符串s
,判断s
是否遵循相同的规律。
输入: pattern = "aaaa", s = "dog cat cat dog" 输出: false
思路一
我们这里可以使用Map进行实现,先声明一个matchMap变量,它的值是Map数据结构的实例,然后在声明一个变量patternArr,它的值是我们对形参pattern使用split方法的返回的数组,然后在声明一个sArr变量,对形参s使用split方法将其返回的数组赋值给sArr变量,然后进行判断当前patternArr数组和sArr数组数据长度是否一致,如果不一致直接返回false,然后对patternArr数组进行循环,在循环中声明pItem变量和sItem变量,他们存储的分别是当前patternArr数组的某一项和当前sArr数组的某一项,然后我们使用Set数据结构中的values方法获取到matchMap变量中的所有value值,在使用Array.from方法将其转换成数组,然后在使用Set数据结构中has方法和数组中的includes方法判断一下当前的pItem变量和sItem变量是否存在于matchMap变量中或者valuesArr数组中,如果存在则返回false,不存在且key值不存在于matchMap变量中则使用set方法把pItem变量当作key,sItem变量当作value存储到matchMap变量中,接下来在判断如果sItem变量不存在且key存在于matchMap变量中返回false,如果最后都没有返回,则直接返回true
var wordPattern = function(pattern, s) { let matchMap = new Map() let patternArr = pattern.split('') let sArr = s.split(' ') if(patternArr.length!=sArr.length){ return false } for(let i = 0;i<patternArr.length;i++){ let pItem = patternArr[i] let sItem = sArr[i] let valuesArr = Array.from(matchMap.values()) if(!matchMap.has(pItem)&&valuesArr.includes(sItem)){ return false }else if(!matchMap.has(pItem)){ matchMap.set(pItem,sItem) }else if(sItem!=matchMap.get(pItem)){ return false } } return true };