首页 > 其他分享 >【华为OJ23】删除字符串中出现次数最少的字符

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

时间:2022-11-22 12:31:08浏览次数:47  
标签:字符 OJ23 map value 次数 华为 str 字符串


题目描述

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



输入描述:



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




输出描述:



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



输入例子:

abcdd



输出例子:

dd

import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc= new Scanner(System.in);
while(sc.hasNext()){
String str = sc.next();
System.out.println(getStr(str));
}
sc.close();
}

public static String getStr(String str){
if(str == null)
return str;
Map<Character,Integer> map = new HashMap<>();
//1 存储字符,统计每个字符出现的次数
for(int i=0;i<str.length();i++){
char c = str.charAt(i);
if(map.containsKey(c)){
map.put(c,map.get(c)+1);
}else{
map.put(c,1);
}
}
//2 遍历集合,获取出现次数最少的字符
int min = Integer.MAX_VALUE;
for(Map.Entry<Character,Integer> entry:map.entrySet()){
Integer value = entry.getValue();
if(value < min)
min = value;
}

//3 添加出现次数最少的字符
Set<Character> set = new HashSet<>();
for(Map.Entry<Character,Integer> entry:map.entrySet()){
Character c = entry.getKey();
Integer value = entry.getValue();
if(value == min)
set.add(c);
}

//4 从原字符串中删除次数最少的字符
StringBuilder sb = new StringBuilder(128);
for(int i=0;i<str.length();i++){
char c = str.charAt(i);
//set可以添加,说明此字符c不是出现次数最少的字符
if(!set.contains(c)){
sb.append(c);
}
}

return sb.toString();


}
}



标签:字符,OJ23,map,value,次数,华为,str,字符串
From: https://blog.51cto.com/u_15886477/5877699

相关文章