解题思路

  1. 使用哈希表(字典)统计每个字符出现的次数
  2. 找出最小出现次数
  3. 遍历原字符串,只保留出现次数大于最小次数的字符

代码

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

int main() {
    string str;
    cin >> str;
    // 统计字符频率
    unordered_map<char, int> freq;
    for (char c : str) {
        freq[c]++;
    }
     
    // 找出最小频率
    int minFreq = str.length();
    for (auto& pair : freq) {
        minFreq = min(minFreq, pair.second);
    }
    
    // 构建结果字符串
    string result;
    for (char c : str) {
        if (freq[c] > minFreq) {
            result += c;
        }
    }
     
    cout << result << endl;
    return 0;
}
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String str = sc.nextLine();
            // 统计字符频率
            Map<Character, Integer> freq = new HashMap<>();
            for (char c : str.toCharArray()) {
                freq.put(c, freq.getOrDefault(c, 0) + 1);
            }
            
            // 找出最小频率
            int minFreq = str.length();
            for (int count : freq.values()) {
                minFreq = Math.min(minFreq, count);
            }
            
            // 构建结果字符串
            StringBuilder result = new StringBuilder();
            for (char c : str.toCharArray()) {
                if (freq.get(c) > minFreq) {
                    result.append(c);
                }
            }
            
            System.out.println(result.toString());
        }
    }
}
s = input()
# 统计字符频率
freq = {}
for c in s:
   freq[c] = freq.get(c, 0) + 1
   
# 找出最小频率
min_freq = min(freq.values())

# 构建结果字符串
result = ''.join(c for c in s if freq[c] > min_freq)

print(result)

算法及复杂度

  • 算法:哈希表统计 + 字符串处理
  • 时间复杂度:,其中 n 为字符串长度
  • 空间复杂度:,其中 k 为不同字符的个数,最大为26(因为题目限定只有小写字母)