1. 题目
https://leetcode.cn/problems/find-resultant-array-after-removing-anagrams/description/?languageTags=javascript
2. 思路
- 对于每个单词,用哈希表统计每个字符出现的次数,前后两个字母进行比较。
- 如果比较以后发现是字母异位词,那就使用js的splice方法将后面的元素删除(splice方法可以改变原始数组)
注意: 不要使用for循环,要使用while循环
3. 代码
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
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
4. 参考
js哈希模拟,不断删除