如何实现数组中所有变位词的删除?现有代码结果不符合预期
解决数组中删除所有变位词的问题
你的代码当前逻辑是保留每组变位词中的最后一个元素,但你需要的是移除所有存在变位词的元素,仅保留无变位词的元素。
原代码问题分析
原代码用对象存储每个排序字符串对应的最后出现单词,这会保留每组变位词中的一个实例(最后出现的那个),而非移除所有变位词。比如输入['cab', 'bac', 'art']时,'cab'和'bac'排序后都是'abc',对象最终存储的是最后出现的'bac',导致返回结果包含'bac'和'art'。
解决方案
要实现需求,需完成两步:
- 统计每个排序后字符串在数组中的出现次数
- 过滤出排序后字符串出现次数为1的单词(即无变位词的单词)
修正后的代码
const deleteAnagrams = (arr) => { // 统计每个变位词组的出现频率 const freqMap = {}; for (const word of arr) { const sortedWord = word.toLowerCase().split('').sort().join(''); freqMap[sortedWord] = (freqMap[sortedWord] || 0) + 1; } // 仅保留无变位词的单词 return arr.filter(word => { const sortedWord = word.toLowerCase().split('').sort().join(''); return freqMap[sortedWord] === 1; }); }; console.log(deleteAnagrams(['cab', 'bac', 'art'])); // 输出: ["art"]
说明
- 第一次遍历数组,用
freqMap记录每组变位词的出现次数 - 第二次遍历数组,只保留所在变位词组仅出现一次的单词,以此移除所有存在变位词的元素
内容的提问来源于stack exchange,提问作者aftab
相关产品推荐
相关产品推荐

