题目: 用javascript 实现一个方法,该方法能够判断两个字符串是否匹配,如:
function isMatch(str1, str2){ //your code starts here } isMatch('something','ginhtemos') //true isMatch('aaa','aa') //false isMatch('abb','baa') //false isMatch('hello','olelh') //true
一个很常规的想法就是把字符串排序后判断两个字符串是否相等,实现方法如下:
function isMatch(str1,str2){ return str1.split('').sort().join('') === str2.split('').sort().join('') }
该方法简单,其时间复杂度取决于sort方法,不同浏览器略有差异,Chrome中的V8引擎排序采用的算法与数组的长度有关,数组长度小于等于10采用的是插入排序,大于10是快速排序。
第二种方法是记录每个字符串字母出现的次数,最后比较每个字符串字母出现的次数是否相等。时间复杂度为O(n),还是很快的。
function isMatch(str1,str2){ if(str1.length!==str2.length){ return false; } var s1 = {}; var s2 = {}; for(let i=0;i<str1.length;i++){ if(!s1[str1[i]]){ s1[str1[i]]=0; } s1[str1[i]]++; } for(let i=0;i<str1.length;i++){ if(!s2[str2[i]]){ s2[str2[i]]=0; } s2[str2[i]]++; } for(let key in s1){ if(s1[key]!==s2[key]){ return false; } } return true; }