【JS】有效的字母异位词 两个字符串的字符构成是否相同

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。

s = “anagram”, t = “nagarma”, 输出: true
s = “rat”, t = “car” , 输出 false

进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?


解法一:

使用 replace() 循环删除索引为 0 的相同的字符


var isAnagram = function(s, t) {
    var len=s.length
    for(var i=0;i<len;i++){
        if(s==t || s.length!=t.length) break;
        t=t.replace(new RegExp(s[0],'g'),"");        
        s=s.replace(new RegExp(s[0],'g'),"");
    }
    return s==t? true:false;
};

34 / 34 个通过测试用例
执行用时:68 ms

or

包含Unicode字符 , U+0057 W, U+0059 Y , U+005A Z

先替换 + 号,再循环替换


var isAnagram = function(s, t) {
    t=t.replace(/[+]/g,'');
    s=s.replace(/[+]/g,'');

    var len=s.length
    for(var i=0;i<len;i++){
        if(s==t || s.length!=t.length) break;
        t=t.replace(new RegExp(s[0],'g'),"");
        s=s.replace(new RegExp(s[0],'g'),"");
    }
    return s==t? true:false;
};

s= "dgqU+005AztusU+0059juuU+0057", t = "dqU+0059ugU+005AjzutU+0057su"
var a=isAnagram(nums,t)
document.write(a)

解法二:

使用map() ,统计每个字符出现次数,对比每个字符次数有没有相等


var isAnagram = function(s, t) {
    if(s.length!=t.length) return false;
    let sarr={}, tarr={}
    for(let i in s){
        if(sarr[s[i]] >=1){
            sarr[s[i]]+=1
        }else{
            sarr[s[i]]=1
        }
    }
    for(let i in t){
        if(tarr[t[i]] >=1){
            tarr[t[i]]+=1
        }else{
            tarr[t[i]]=1
        }
    }
    for(let i in sarr){
        if(sarr[i]!=tarr[i]) return false;
    }
    return true;
};

34 / 34 个通过测试用例
状态:通过
执行用时:144 ms

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值