您的位置:首页 > 其它

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

2016-10-06 00:48 399 查看


题目描述

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

输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于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();

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: