首页 > 试题广场 >

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

[编程题]删除字符串中出现次数最少的字符
  • 热度指数:387558 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

数据范围:输入的字符串长度满足 ,保证输入的字符串中仅出现小写字母

输入描述:

字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。



输出描述:

删除字符串中出现次数最少的字符后的字符串。

示例1

输入

aabcddd

输出

aaddd
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String input = in.nextLine();
        String result = reChars(input);

        System.out.println(result);
    }

    public static String reChars(String str) {
        // 使用HashMap来存储每个字符出现的次数
        Map<Character, Integer> charCountMap = new HashMap<>();
        for (char c : str.toCharArray()) {
            charCountMap.put(c, charCountMap.getOrDefault(c, 0) + 1);
        }

        // 找出出现次数最少的字符
        int minCount = Integer.MAX_VALUE;
        for (int count : charCountMap.values()) {
            if (count < minCount) {
                minCount = count;
            }
        }

        // 删除出现次数最少的字符
        StringBuilder result = new StringBuilder();
        for (char c : str.toCharArray()) {
            if (charCountMap.get(c) > minCount) {
                result.append(c);
            }
        }

        return result.toString();
    }
}

发表于 2024-10-18 16:36:55 回复(0)
import java.util.Scanner;
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            char[] arr = in.nextLine().toCharArray();
            Map<Character, Integer> m = new HashMap<Character, Integer>();
            for (char a : arr) {
                if (m.keySet().contains(a)) {
                    m.put(a, m.get(a) + 1);
                } else {
                    m.put(a, 1);
                }
            }// m:{a=2, b=1, c=1, d=3}
            List<Integer> l = new ArrayList<Integer>(m.values());// 2 1 1 3
            Collections.sort(l);// 1 1 2 3
            int min = l.get(0);// 1
            Map<Character, Integer> n = new HashMap<Character, Integer>();
            for (Map.Entry<Character, Integer> entry : m.entrySet()) {
                if (min == entry.getValue()) {
                    n.put(entry.getKey(), entry.getValue());
                }
            }// n: {b=1, c=1}
            m.keySet().removeAll(n.keySet());// m: {a=2, d=3}
            StringBuilder s = new StringBuilder();
            for (char a : arr) {
                if (m.keySet().contains(a)) {
                    s.append(a);
                }
            }// s:aaddd
            System.out.println(s);
        }
    }
}
发表于 2024-09-10 16:23:18 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String sc = in.nextLine();
        Map<Character,Integer> count = new HashMap<>();
        char[] ch = sc.toCharArray();
        StringBuilder newSc = new StringBuilder();
        //计数
        for( int i = 0; i < ch.length; i++)
        {
            if(count.containsKey(ch[i]))
            {
                count.put(ch[i],count.get(ch[i])+1);
            }
            else
            {
                count.put(ch[i],1);
            }
        }
        //找出最小次数min
        int min = 20;
        for(Integer t : count.values())
        {
            if(t<min)
            {
                min=t;
            }
        }
        //将所有出现次数为min的不显示
        for(int i = 0; i < ch.length; i++)
        {
            if(count.get(ch[i])!=min)
            {
                newSc.append(ch[i]);
            }
        }
        System.out.println(newSc.toString());
    }
}
发表于 2024-09-02 03:31:46 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String string = in.nextLine();
        Map<String, Integer> map = new HashMap<String, Integer>();
        for (String item : Arrays.asList(string.split(""))) {
            Integer s = map.get(item);
            if (s == null) {
                map.put(item, 1);
            } else {
                map.put(item, s + 1);
            }
        }
        Integer temp =null;
        for(String key:map.keySet()){
            if(temp == null){
                temp = map.get(key);
            }else{
                if(map.get(key) < temp){
                    temp = map.get(key);
                }
            }
        }
        for(String key:map.keySet()){
            if( map.get(key) == temp){
               string = string.replace(key,"");
            }
         
        }
        System.out.print(string);
    }
}
发表于 2024-07-15 20:58:12 回复(0)
为什么好多人都用map?用数组不是更简单吗?
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextLine()) {
            int[] ss = new int[26];
            String str = in.nextLine();
            for(int i=0;i<str.length();i++){
                ss[str.charAt(i)-'a']++;
            }
            int minCount = 21;
            for(int i=0;i<26;i++) {
                if(ss[i] > 0 && ss[i]< minCount) {
                    minCount = ss[i];
                }
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < str.length(); i++) {
                if(ss[str.charAt(i) - 'a'] != minCount) {
                    sb.append(str.charAt(i));
                }
            }
            System.out.println(sb);
        }
    }
}


发表于 2024-06-14 22:49:33 回复(0)
import java.util.HashMap;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        while (input.hasNext()) {
            String str = input.nextLine();
            HashMap<Character, Integer> count = new HashMap<>();
            for (char c : str.toCharArray()) {
                count.put(c, count.getOrDefault(c, 0) + 1);
            }
            //找出出现次数最少的字符的次数
            int min = Integer.MAX_VALUE;
            for (int num : count.values()) {
                min = Math.min(min, num);
            }
            //构建新的字符串,去掉出现次数最少的字符
            StringBuilder sb = new StringBuilder();
            for (char c : str.toCharArray()) {
                if (count.get(c) > min) {
                    sb.append(c);
                }
            }
            System.out.println(sb.toString());
        }
    }
}

发表于 2024-05-28 10:49:26 回复(0)
import java.util.HashMap;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String input = in.nextLine();
        HashMap<Character,Integer> map = new HashMap<>();
        
        for(int i=0;i<input.length();i++) {
            char tmp = input.charAt(i);
            if(map.containsKey(tmp)) {
                map.replace(tmp, map.get(tmp)+1);
            } else {
                map.put(tmp,1);
            }
        }

        int minValue = Integer.MAX_VALUE;
        for(Integer value:map.values()) {
            if(value<minValue) {
                minValue = value;
            }
        }

        for(int j=0;j<input.length();j++) {
            char tmp = input.charAt(j);
            if(map.get(tmp)!=minValue) {
                System.out.print(tmp);
            }
        }
    }
}

发表于 2024-04-30 10:14:07 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < str.length(); i++) {
            if (map.containsKey(str.charAt(i))) {
                map.put(str.charAt(i), map.get(str.charAt(i)) + 1);
            } else {
                map.put(str.charAt(i), 1);
            }
        }
        int min = 20;
        for (Character ch : map.keySet()) {
            min = map.get(ch) < min ? map.get(ch) : min;
        }
        for (Character ch : map.keySet()) {
            if (map.get(ch) == min) {
                str = str.replace(String.valueOf(ch), "");
            }
        }
        System.out.println(str);
    }
}
发表于 2024-04-17 10:36:49 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        //统计所有字符的个数
        HashMap<Character, Integer> map = new HashMap();
        for (int i = 0; i < str.length(); i++) {
            char a = str.charAt(i);
            if (map.containsKey(a)) {
                int count = map.get(a);
                map.put(a, ++count);
            } else {
                map.put(a, 1);
            }
        }
        StringBuilder sb = new StringBuilder("");

        //找到最小值并删除
        int min = Collections.min(map.values());
        Iterator <Map.Entry<Character, Integer>>it = map.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<Character, Integer> entry = it.next();
            if (entry.getValue() == min) {
                it.remove();
            }
        }
        //map里面存在的字符都是符合条件的,对比字符串,不断拼接符合条件爱你的字符
        for(int i =0;i<str.length();i++){
            if(map.containsKey(str.charAt(i))){
                sb.append(str.charAt(i));
            }
        }
        System.out.println(sb.toString());

    }
}

发表于 2024-04-10 15:32:42 回复(0)
import java.util.*;
import java.util.stream.Collectors;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            HashMap map = new HashMap();
            String s = scan.next();
            char[] chars = s.toCharArray();
            for (char c : chars) {
                if (map.containsKey(c)) {
                    map.put(c, map.get(c) + 1);
                } else {
                    map.put(c, 1);
                }
            }
            Integer less = map.entrySet().stream()
                            .sorted(Comparator.comparingInt(Map.Entry::getValue)).findFirst().get().getValue();
            //获取出现次数最少的字符
            List lessList = map.entrySet().stream()
                            .filter(e -> e.getValue() == less).map(Map.Entry::getKey).collect(Collectors.toList());
            StringBuilder sb = new StringBuilder();
            for (char nc : chars) {
                if (!lessList.contains(nc)) sb.append(nc);
            }
            System.out.println(sb);
        }
    }
}
发表于 2024-04-10 14:00:50 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.next();
        Map<Character, Integer> map = new HashMap();
        char ch;
        for (int i = 0; i < str.length(); ++ i ) {
            ch = str.charAt(i);
            int t = map.getOrDefault(ch, 0);
            ++ t;
            map.put(ch, t);
        }
        Set<Character> set = map.keySet();
        int min = 21;
        for (Character c : set) {
            if (map.get(c) < min) min = map.get(c);
        }
        for (Character c : set) {
            if (map.get(c) == min) {
                str = str.replace(c + "", "");
            }
        }
        System.out.println(str);
    }
}

编辑于 2024-03-16 15:33:24 回复(0)
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        Map<Character, Integer> map = new HashMap<>();
        for (char c: str.toCharArray()) {
        map.put(c, (map.getOrDefault(c, 0) + 1));
        }
       Collection<Integer> values = map.values(); 
       int min = Collections.min(values);
       for(Character c:map.keySet()){
        if(map.get(c) == min){
            str = str.replaceAll(String.valueOf(c),"");
        }
       }
       System.out.println(str);
    }
}

编辑于 2024-03-06 23:54:08 回复(0)
这个编译器不可以导入map包吗???
编辑于 2024-01-25 15:15:47 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            //先记录每个字母出现的次数
            //由于是26个小写字母
            int[] count = new int[26];
            for (int i = 0; i < str.length(); i++) {
                //由于字母之间的ACSII值只相差1.可以通过遍历每个字母-a 得到数组的下标,每次遇到同一个下标说明是重复的字母  怎对应下标的值加1
                count[str.charAt(i) - 'a']++;
            }
            //接下来遍历数组判断最少的字母出现的次数,由于字符串长度小于等于20 所以定义一个最大的重复值为20
            int min = 20;
            for (int i = 0; i < count.length; i++) {
                //判断数组值不为0(为0表示未出现)并且值小于min 的,如果小于则将最小值更新为当前最小的值
                if (count[i] != 0 && count[i] < min) {
                    min = count[i];
                }
            }
            //接下来剔除最小的字母
            StringBuilder buff = new StringBuilder();
            for (int i = 0; i < str.length(); i++) {
                if (count[str.charAt(i) - 'a'] != min) {
                    buff.append(str.charAt(i));
                }
            }
            System.out.println(buff.toString());
        }
    }
}
发表于 2024-01-13 22:18:25 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String line = in.nextLine();
Map<String, Integer> map = new HashMap<>();
char[] c = line.toCharArray();
String[] s = new String[20];
int min =Integer.MAX_VALUE;
for (int i = 0; i < c.length; i++) {
Integer a = map.get(c[i] + "");
if (a == null) {
map.put( c[i] + "", 1);
} else {
map.put( c[i] + "", a + 1);
}
}
Set<String> keyset = map.keySet();
Iterator<String> ite = keyset.iterator();
while (ite.hasNext()) {
String key = ite.next();
Integer value = map.get(key);
//判断最小值
if (value <= min) {
min=value;
if (s[value] != null && !"".equals(s[value])) {
String tmp = s[value] + "," + key;
s[value] = tmp;
} else {
s[value] = key;
}
}

}

for (int i = 0; i < s.length; i++) {
if (s[i] != null && !"".equals(s[i])) {
String[] g = s[i].split(",");
for (int j = 0; j < g.length; j++) {
line = line.replaceAll(g[j], "");
}
break;
}
}
System.out.print(line);
}

}
这个写的还是不够简洁;
下面是其他人的思路:真简单!!! 
先用map 统计每个字符出现的次数;
 然后对map的value collection做排序,找到最小的值;
keyset遍历map,匹配value是最小值的key,然后做replaceAll的替换;

发表于 2023-10-22 14:27:54 回复(0)
import java.util.Scanner;

import java.util.HashMap;
import java.util.Map;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {


    public static String removeLeastFrequentChars(String input) {
        if (input == null || input.isEmpty()) {
            return input;
        }

        // 使用哈希表来统计字符出现的次数
        Map<Character, Integer> charCount = new HashMap<>();
        for (char c : input.toCharArray()) {
            charCount.put(c, charCount.getOrDefault(c, 0) + 1);
        }

        // 找到最少出现次数
        int minCount = Integer.MAX_VALUE;
        for (int count : charCount.values()) {
            if (count < minCount) {
                minCount = count;
            }
        }

        // 构建结果字符串,删除出现次数最少的字符
        StringBuilder result = new StringBuilder();
        for (char c : input.toCharArray()) {
            if (charCount.get(c) != minCount) {
                result.append(c);
            }
        }

        return result.toString();
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input =  sc.nextLine();
        String result = removeLeastFrequentChars(input);
        System.out.println(result);
    }
}


发表于 2023-10-10 20:14:27 回复(0)
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        int size = str.length();
        int count = str.length();
        Set<String> set = new HashSet<>();
        for (int i = 0; i < str.length(); i++) {
            String s = str.charAt(i)+"";
            String st = str.replaceAll(s, "");
            if (count > (size-st.length())) {
                count = size-st.length();
                set.clear();
                set.add(s);
            }
            if (count == (size-st.length()) && !set.contains(s)) {
                set.add(s);
            }
        }
        if (!set.isEmpty()) {
            for (String s:set) {
                str = str.replace(s, "");
            }
        }
        System.out.println(str);
    }
}

发表于 2023-09-27 17:20:50 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        String str=in.nextLine();
        int[] arr=new int[str.length()];
        for(int i=0;i<str.length();i++){
            arr[i]=0;
        }
        for(int i=0;i<str.length();i++){
            for(int j=0;j<str.length();j++){
                if(str.charAt(i)==str.charAt(j)){
                    arr[i]=arr[i]+1;
                }
            }
        }
        int num=arr[0];
        for(int i=1;i<str.length();i++){
            if(num>arr[i]){
                num=arr[i];
            }
        }
        for(int i=0;i<str.length();i++){
            if(arr[i]!=num){
                System.out.print(str.charAt(i));
            }
        }
    }
}

发表于 2023-09-15 22:22:12 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String str = scanner.next();
            deleteCharacter(str);
        }
        scanner.close();
    }

    public static void deleteCharacter(String str) {
	    // 统计字符频率
        Map<Character, Integer> count = new HashMap<>();
        char[] chs = str.toCharArray();
        for (int i = 0; i < chs.length; i++) {
            Character ch = chs[i];
            int num = count.get(ch) == null ? 0 : count.get(ch);
            count.put(ch, num + 1);
        }
		// 最小次数最大值应该是字符串长度,而不是Integer.MAX_VALUE或者21
        int minCount = str.length();
        for (Map.Entry<Character, Integer> entry : count.entrySet()) {
            if (entry.getValue() < minCount)
                minCount = entry.getValue();
        }
        // 结果处理这里没有直接得到最终字符串,而是按照要求打印了字符串
        for (int i = 0; i < chs.length; i++) {
            if (minCount != count.get(chs[i]))
                System.out.print(chs[i]);
        }
        System.out.println();
    }
}

发表于 2023-09-11 10:53:24 回复(0)