1. 题目
https://leetcode.cn/problems/find-resultant-array-after-removing-anagrams/description/?languageTags=javascript
2. 思路
- 对于每个单词,用哈希表统计每个字符出现的次数,前后两个字母进行比较。
- 如果比较以后发现是字母异位词,那就使用js的splice方法将后面的元素删除(splice方法可以改变原始数组)
注意: 不要使用for循环,要使用while循环
3. 代码
/**
* @param {string[]} words
* @return {string[]}
*/
var removeAnagrams = function(words) {
let right = 1
while (right < words.length) {
let preMap = countMap(words[right - 1]),
curMap = countMap(words[right])
if (check(preMap, curMap)) {
words.splice(right, 1)
} else {
right++
}
}
return words
};
// 对字符串中字符个数统计的哈希表
function countMap(word) {
let map = new Map()
for (let ch of word) {
map.set(ch, (map.get(ch) || 0) + 1)
}
return map
}
// 判断两个单词是否为字母异位词
function check(map1, map2) {
if (map1.size !== map2.size) return false
for (let [key, value] of map1) {
if (value !== map2.get(key)) return false
}
return true
}
4. 参考
js哈希模拟,不断删除