字符串匹配判断

题目: 用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;
}            

  

猜你喜欢

转载自www.cnblogs.com/renbo/p/9032366.html