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

题目描述

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

输入描述:

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

输出描述:

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

输入例子:
abcdd
输出例子:
dd

思路:(我的思路有点绕弯,先记录下来,后面有网友简洁思路),首先把字符串元素存入list中,继续以key-字符,value-出现次数存入map中,然后map按照value自然升序排序,然后取出map中value最小的对应的key放入另外一list中,则存储原始字母的list删去对应小的map中的key(已存在另一list),OK
 1 import java.util.ArrayList;
 2 import java.util.Collections;
 3 import java.util.Comparator;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 import java.util.Map.Entry;
 8 import java.util.Scanner;
 9
10 public class DelStr {
11
12     public static void main(String[] args) {
13         Scanner sc = new Scanner(System.in);
14         while (sc.hasNextLine()) {
15             String s = sc.nextLine();
16             newStr(s);
17         }
18     }
19
20     public static void newStr(String s) {
21         Map<String, Integer> map = new HashMap<String, Integer>();//key-字符,value-字符出现次数
22         List<String> li1 = new ArrayList<String>();//用来存储出现次数最少的元素
23
24         List<String> li2 = new ArrayList<String>();//用来存储原始字符串
25         for (int i = 0; i < s.length(); i++) {
26             li2.add(String.valueOf(s.charAt(i)));
27         }
28
29         for (int i = 0; i < s.length(); i++) {//把字符串存储map中,根据value用来寻找出现次数最少的字符
30             String key = String.valueOf(s.charAt(i));
31             if (!map.containsKey(key)) {
32                 map.put(key, 1);
33             } else {
34                 map.put(key, map.get(key) + 1);
35             }
36         }
37
38         List<Map.Entry<String, Integer>> li = new ArrayList<Map.Entry<String, Integer>>(//把map.entrySet()准换为list元素
39                 map.entrySet());
40
41         Collections.sort(li, new Comparator<Map.Entry<String, Integer>>() {//使用Collections工具类对list中的Map.Entry<String, Integer>类型元素进行value值升序排序
42             @Override
43             public int compare(Entry<String, Integer> o1,
44                     Entry<String, Integer> o2) {
45                 if (o1.getValue() < o2.getValue()) {
46                     return -1;
47                 } else if (o1.getValue() > o2.getValue()) {
48                     return 1;
49                 }
50                 return 0;
51             }
52
53         });
54
55         int flag = 0;//记录出现次数最少的元素个数
56         for (int i = 0; i < li.size() - 1; i++) {
57             int tem1 = li.get(i).getValue(), tem2 = li.get(i + 1).getValue();
58             if (tem1 != tem2) {
59                 break;
60             } else {
61                 flag += 1;
62             }
63         }
64
65         for (int i = 0; i <= flag; i++) {//把出现次数最少的元素存储到li链表中
66             String s1 = li.get(i).getKey();
67             li1.add(s1);
68         }
69
70         li2.removeAll(li1);//原始数据中移除出现次数最少的元素
71
72         for (int i = 0; i < li2.size(); i++) {//输出更新后的元素
73             System.out.print(li2.get(i));
74         }
75         System.out.print("\n");
76     }
77
78 }

实际上我的代码冗余而且多了不必要的步骤;下面是网友代码:



 1 import java.util.*;
 2 public class Main{
 3     public static void main(String [] args){
 4         Scanner in = new Scanner(System.in);
 5         String str = "";
 6         HashMap<Character,Integer> map;
 7         while(in.hasNext()){
 8             str = in.nextLine();
 9             StringBuffer sb = new StringBuffer();
10             map = new HashMap<Character,Integer>();
11             int Min = Integer.MAX_VALUE;
12             for(int i = 0;i<str.length();i++){
13                 char ch = str.charAt(i);
14                 if(map.containsKey(ch)){
15                     map.put(ch,map.get(ch) + 1);
16                 }else{
17                     map.put(ch,1);
18                 }
19             }
20             for( Integer value :map.values()){
21                 Min = Math.min(value,Min);
22             }
23             for(int i=0;i<str.length();i++){
24                 char ch = str.charAt(i);
25                 if(map.get(ch) != Min){
26                     sb.append(ch);
27                 }
28             }
29             System.out.println(sb.toString());
30         }
31     }
32 }

再贴一个

 1 import java.util.HashMap;
 2 import java.util.HashSet;
 3 import java.util.Scanner;
 4
 5 public class Main {
 6     public static void main(String[] args) {
 7         Scanner console = new Scanner(System.in);
 8         HashMap<Character, Integer> map = new HashMap<>();
 9         HashSet<Character> charSet = new HashSet<>();
10         char[] charArr;
11         while (console.hasNext()) {
12             String inputStr = console.next();
13             charArr = inputStr.toCharArray();
14             for (int i = 0; i < charArr.length; i++) {
15                 charSet.add(charArr[i]);
16             }
17             for (char ch : charSet) {
18                 int temp = 0;
19                 for (int i = 0; i < charArr.length; i++) {
20                     if (ch == charArr[i]) {
21                         temp++;
22                     }
23                 }
24                 map.put(ch, temp);
25             }
26             int min = Integer.MAX_VALUE;
27             for(char ch : map.keySet()){
28                 int value = map.get(ch);
29                 if(value < min){
30                     min = value;
31                 }
32             }
33             StringBuilder result = new StringBuilder();
34             for (int i = 0; i < charArr.length; i++) {
35                 if (map.get(charArr[i]) != min)
36                     result.append(charArr[i]);
37                 else
38                     continue;
39             }
40             System.out.println(result);
41         }
42         console.close();
43     }
44 }
				
时间: 2024-12-29 07:51:59

删除字符串中出现次数最少的字符的相关文章

算法分析---删除字符串中出现次数最少的字符

编写一个函数,删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串.字符串中其他字符保持原来的顺序. 格式说明: 字符串仅仅包括字母.不可能为空串,不包括空格,单词仅仅由小写英文字母组成.输入的字符串长度不会超过20个char . 算法思路: (1)定义一个长度为26的整型数组 下标从0-25分别表示a-z这26个小写字母,用来保存字符串中各个字符出现的次数 (由于'a'-'a'=0,'z'-'a'=25刚好与数组的下标相应) "abcdddeeffffx

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

题目描述 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序. 输入描述:字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出描述:删除字符串中出现次数最少的字符后的字符串. 输入例子: abcdd 输出例子: dd 思路:统计各个字符出现的次数,放在LinkedHashMap里,可以把values取出来放到一个collection里,直接调用collection的min()得到出现次

算法基础:删除字符串中出现次数最少的字符(Golang实现)

描述: 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串, 字符串中其它字符保持原来的顺序. 输入: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出: 删除字符串中出现次数最少的字符后的字符串. 样例输入: abcdd 样例输出: dd 代码实现 package huawei import ( "fmt" ) func Test4Base() { s := "abcfbcca"

[华为上机练习题]7.删除字符串中出现次数最少的字符

题目 描述: 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序. 题目类别: 字符串 难度: 中级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出: 删除字符串中出现次数最少的字符后的字符串. 样例输入: abcdd 样例输出: dd 代码 /*------------------------

华为OJ在线软件训练题——删除字符串中出现次数最少的字符(中级)

删除字符串中出现次数最少的字符 描述: 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除. 输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序. 题目类别: 字符串 难度: 中级 分数:   运行时间限制: 10 Sec 内存限制: 128 MByte 阶段: 招聘管理 输入: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出: 删除字符串中出现次数最少的字符后的字符串. 样例输入: abcdd 样例输出: dd 对于此类题目,简

华为机试:删除字符串中出现次数最少的字符

题目描述 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序. 输入描述: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出描述: 删除字符串中出现次数最少的字符后的字符串. 示例1 输入 abcdd 输出 dd Java:用两个数组来记录各个字符的个数,一个用来排序找出最小的字符出现次数,一个用来决定是否输出当前字符. 1 import java.util.Arrays; 2 i

【华为OJ】【022-删除字符串中出现次数最少的字符】

[华为OJ][算法总篇章] [华为OJ][022-删除字符串中出现次数最少的字符] [工程下载] 题目描述 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序. 输入描述 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出描述 删除字符串中出现次数最少的字符后的字符串. 输入例子 abcdd 输出例子 dd 算法实现 import java.util.*; /** * Author:

实现一个算法,寻找字符串中出现次数最少的、并且首次出现位置最前的字符

<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>test</title> <script> // 获取字符串中出现次数最少的字符 function getRareChar(str) { let hash = {}; // 将各个字符名字.首次出现位置及出现次数存到hash表 for(le

找出字符串中出现次数最多的字符,和最大次数

/*找出字符串中出现次数最多的字符,和最大次数*/ function countMax(str){ var max = 0; // 记录出现的最大次数 var maxChar = ""; // 记录出现最多次数的字符 var counts = new Array(127); // 记录中间计算结果 for(var i = 0; i < counts.length; i++){ counts[i] = 0; } for(var i = 0; i < str.length; i