去除字符串中出现次数最少的字符

删除字符串中出现频率最低的字符,保持原有顺序

问题

实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些字符后的字符串,保持其它字符的原有顺序。

示例:

  • "ababac""ababa"
  • "aaabbbcceeff""aaabbb"

解答

function removeLeastFrequentChar(str) {
  // 统计每个字符出现的次数
  const charMap = {};
  for (let i = 0; i < str.length; i++) {
    const char = str[i];
    charMap[char] = (charMap[char] || 0) + 1;
  }

  // 找出最少出现次数
  const minCount = Math.min(...Object.values(charMap));

  // 过滤掉出现次数最少的字符
  let result = '';
  for (let i = 0; i < str.length; i++) {
    const char = str[i];
    if (charMap[char] !== minCount) {
      result += char;
    }
  }

  return result;
}

// 测试
console.log(removeLeastFrequentChar("ababac"));        // "ababa"
console.log(removeLeastFrequentChar("aaabbbcceeff"));  // "aaabbb"

关键点

  • 使用对象统计每个字符的出现次数
  • 通过 Math.min() 找出最小出现次数
  • 遍历原字符串并过滤,保持原有顺序
  • 时间复杂度 O(n),空间复杂度 O(n)