题解 | #删除字符串中出现次数最少的字符#

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

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();
        }
    }
}



全部评论

相关推荐

11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
牛客868257804号:九个中铁八个中建
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务