https://leetcode-cn.com/problems/valid-anagram/
描述
给定两个字符串 s_t_t_s 的一个字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
分析
开始使用的是split,根据拆出来的数组长度是否一直进行判断,但是最后超出时间限制
var isAnagram = function(s, t) {
if (s.length !== t.length) {
return false
}
let len = s.length
for (let i = 0; i < len; i++) {
if (s.split(s[i]).length !== t.split(s[i]).length) {
return false
}
}
return true
};
最后老老实实的存对象里进行判断
var isAnagram = function(s, t) {
if (s.length !== t.length) {
return false
}
let len = s.length, sobj = {}, tobj = {}
for (let i = 0; i < len; i++) {
sobj[s[i]] = sobj[s[i]] + 1 || 1
tobj[t[i]] = tobj[t[i]] + 1 || 1
}
for (i in sobj) {
if (sobj[i] !== tobj[i]) {
return false
}
}
return true
};
看了评论,还有种正则replace的方法
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;
};