首页 > 试题广场 >

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

[编程题]删除字符串中出现次数最少的字符
  • 热度指数:368946 时间限制: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 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)
char[] chars = str.toCharArray();
map.put(aChar, map.getOrDefault(aChar, 0)+1);

发表于 2023-07-30 20:01:48 回复(0)
import java.util.Scanner;
import java.util.LinkedHashMap;
import java.util.Set;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String input = in.nextLine();

            LinkedHashMap<Character, Integer> linkhashmap = new
            LinkedHashMap<Character, Integer>();

            for (int i = 0; i < input.length(); i++) {
                linkhashmap.put(input.charAt(i), linkhashmap.getOrDefault(input.charAt(i),
                                0) + 1);
            }

            Set<Character> tempSet = linkhashmap.keySet();
            //System.out.println(linkhashmap);
            //System.out.println(tempSet);


            int minNum = 100;
            for (Character a : tempSet) {
                if (linkhashmap.get(a) < minNum) {
                    minNum = linkhashmap.get(a);
                }
            }

            //System.out.println(minNum);


            for (Character a : tempSet) {
                if (linkhashmap.get(a) == minNum) {
                    String s1 = a +"";
                    //System.out.println(s1);

                    input = input.replaceAll(s1,"");
                }
            }

            System.out.println(input);
        }
    }
}

发表于 2023-07-03 10:10:15 回复(0)
import java.util.*;
import java.lang.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        HashSet set = new HashSet();
        String str = in.nextLine();
        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);
            }
        }   
            set.addAll(map.values());
            Object[] arr = set.toArray();
            Arrays.sort(arr);
            for (int j = 0; j < str.length(); j++){
                if(map.get(str.charAt(j))!=arr[0]){
                    System.out.print(str.charAt(j));
                }
            }
    }
}

发表于 2023-06-18 15:39:03 回复(0)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String str = scanner.nextLine();
        Set<Character> set = new HashSet<>();
        for (int i = 0; i < str.toCharArray().length; i++) {
            set.add(str.charAt(i));
        }
        Map<Character, Integer> map = new HashMap();
        for (Character character : set) {
            int times = 0;
            for (int i = 0; i < str.toCharArray().length; i++) {
                if (character == str.charAt(i)) {
                    times++;
                } else {
                    continue;
                }
            }
            map.put(character, times);
        }
        List<Integer> list = new ArrayList<>();
        map.forEach((character, integer) -> list.add(integer));
        Collections.sort(list);
        Set set1 = map.entrySet();
            for (Object o : set1) {
                Map.Entry entry = (Map.Entry) o;
                if (list.get(0).equals(entry.getValue())) {
                    str = str.replaceAll(String.valueOf(entry.getKey()), "");
                }
            }
        System.out.println(str);
    }
}
发表于 2023-05-31 11:52:07 回复(0)
import java.util.*;

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

        int minCount = Integer.MAX_VALUE;
        for(int count: map.values()){
            minCount = Math.min(count,minCount);
        }
        StringBuffer sub = new StringBuffer();
        for(int j=0;j<a.length();j++){
            char b = a.charAt(j);
            if(map.get(b) > minCount){
                sub.append(b);
            }
        }
        System.out.print(sub);
    }
}

发表于 2023-05-23 13:58:54 回复(0)
我看评论都是使用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.next();
        char[] arr = input.toCharArray();
        int[] count = new int[26]; // 0-25对应了26个小写字母
        for(int i=0; i<arr.length; i++){
            char t  = arr[i];
            count[t-97]++;
        }
        int min = 20; // 字符串长度小于等于20
        for(int i=0; i<count.length; i++){
            if(count[i] > 0 && count[i] < min) {
                min = count[i];
            }
        }
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<arr.length; i++){
            char t  = arr[i];
            int f = count[t-97];
            if(f == min) {
                continue;
            }
            sb.append(t);
        }
        System.out.print(sb.toString());

    }
}

发表于 2023-05-08 22:45:36 回复(0)
很暴力的做法:1、最小值初始值应该为最大值;2、注意substring第一个字符和最后一个字符的区别
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 a = in.next();
String old = new String(a);
int[] b = new int[26];
for (int i = 0 ; i < 26 ; i++) {
b[i] = 0;
}
for (int i = 0 ; i < a.length() ; i++) {
char c = a.charAt(i);
b[c-'a']++;
}
int min = 21;
for (int i = 0 ; i < 26 ; i++) {
if (b[i] > 0 && min > b[i]) {
min = b[i];
}
}
// System.out.println("min:" + min);
for (int i = 0 ; i < 26 ; i++) {
if (b[i] == min) {
int length = a.length();
for (int j = 0 ; j < length ;) {
char c = a.charAt(j);
if (c == i + 'a') {
// System.out.println("j:" + j);
if (j == 0) {
a = a.substring(1);
} else if (j == length) {
a = a.substring(0, j - 1);
} else {
a = a.substring(0, j) + a.substring(j+1);
}
length--;
} else {
j++;
}
}
}
}
System.out.println(a);
}
}
}

发表于 2023-05-06 16:56:42 回复(0)