题解 | #删除字符串中出现次数最少的字符#
删除字符串中出现次数最少的字符
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(); } } }