1. https://leetcode-cn.com/problems/valid-anagram/submissions/
时间复杂度:O(nlogn)
排序:将字符串转换为数组进行排序,排序的结果在转成字符串进行判断。
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
if(s.length !== t.length) return false
return s.split("").sort().join('') == t.split("").sort().join('')
};
时间复杂度:O(n)
哈希表:利用哈希表将S字符串字母出现的次数放在map中,T字符串对map对应的字母做减法,如果次数为1,删除对应的索引。最后判断map的size是否为0。
/**
* @param {string} s
* @param {string} t
* @return {boolean}
*/
var isAnagram = function(s, t) {
if(s.length !== t.length) return false
const map = new Map()
for (let i = 0; i < s.length; i++) {
const getMap = map.get(s[i])
if (!getMap) {
map.set(s[i], 1)
} else {
map.set(s[i], getMap + 1)
}
}
for (let i = 0; i < t.length; i++) {
const getMap = map.get(t[i])
if (getMap === 1) {
map.delete(t[i])
} else if (getMap) {
map.set(t[i], getMap - 1)
} else {
map.set(t[i], 1)
}
}
return !map.size
};
2. https://leetcode-cn.com/problems/group-anagrams/
时间复杂度:O(n)
将数组中的每一个字符串进行排序作为map的key。排序结果相同key的值放在一个数组中,存到map。
var groupAnagrams = function(strs) {
if(!Array.isArray(strs) && !strs.length) return fasle
let map = new Map()
strs.forEach(item => {
const key = item.split("").sort().join("")
map.has(key) ? map.get(key).push(item) : map.set(key,[item])
})
return Array.from(map.values())
};