题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
http://www.nowcoder.com/practice/05182d328eb848dda7fdd5e029a56da9
1.首先需要创建2个集合:
a.1个集合以键值对形式存储,获取字符串中所有字符key及其对应出现的次数value,故选用HashMap<Character,Integer>集合;
b.另外1个集合逐个按顺序存储字符,元素要求有序,而且可重复,故选用ArrayList集合;
2.其实for循环也可以实现找到最小值的功能:
a.先通过for循环找到HashMap中最小的value值;
b.同时也能找到对应的key值,再通过while循环将list集合中所有的key元素删除;
c.只要在HashMap中找到a中的value值,待b步骤完成后即可通过break结束for循环;
3.再将删除部分元素后的list集合中的元素循环输出即可:
import java.util.Scanner;
import java.util.HashMap;
import java.util.Map;
import java.util.ArrayList;
import java.util.List;
public class Main{
public static void main(String[] arg){
Scanner sc=new Scanner(System.in);
while(sc.hasNextLine()){
String str = sc.nextLine();
HashMap<Character,Integer> map = new HashMap<Character,Integer>();
ArrayList<Character> list = new ArrayList<Character>();
for(int i=0;i<str.length();i++){
if(list.contains(str.charAt(i))){
map.put(str.charAt(i),map.get(str.charAt(i))+1);
list.add(str.charAt(i));
}else{
map.put(str.charAt(i),1);
list.add(str.charAt(i));
}
}
for(int j = 1;j<=str.length();j++){
if(map.containsValue(j)){
for(Map.Entry<Character, Integer> entry:map.entrySet()){
if(entry.getValue() == j){
while(list.contains(entry.getKey())){
list.remove(entry.getKey());
}
}
}
break;
}
}
for(int j = 0;j<list.size();j++){
System.out.print(list.get(j));
}
System.out.println();
}
}
}
查看14道真题和解析