给定两个字符串 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