1. 程式人生 > >實現HashMap排序

實現HashMap排序

自己刷線上程式設計題用到好多次hashmap,刷了三四遍才能記住hashmap表的排序。

我就不生講了,直接用刷的一個題目為例

給出一個01字串(長度不超過100),求其每一個子串出現的次數。

輸入描述:

輸入包含多行,每行一個字串。

輸出描述:

對每個字串,輸出它所有出現次數在1次以上的子串和這個子串出現的次數,輸出按字典序排序。

示例1

輸入

複製

10101

輸出

複製

0 2
01 2
1 3
10 2
101 2

剛開始做這個題目,我在想這是不是一個動態規劃,或者其他演算法簡便的計算,最後,沒有這回事,它就是遍歷,但是一個注意的是用hahsmap計數,然後排序,然後輸出

import java.util.*;
import java.util.Collections;
public class Main{
    public static void main(String []args)
    {
        Scanner sc=new Scanner(System.in);
        String s=sc.next();
//這個地方就是把陣列遍歷拆分,然後裝進map中
        Map<String,Integer> map=new HashMap<String,Integer>();
        for(int i=1;i<=s.length();i++)
        {
            for(int j=0;j<i;j++)
            {
                String sub=s.substring(j,i);
                if(map.containsKey(sub))
                    map.put(sub,map.get(sub)+1);
                else
                    map.put(sub,1);
            }
        }
//排序
//1.轉為List
         List<Map.Entry<String,Integer>> list=new ArrayList<>(map.entrySet());
//2.重寫排序,這裡實現的是根據key值排序,也可以根據value排序
	        Collections.sort(list,new Comparator<Map.Entry<String, Integer>>() 
            {
                @Override
                public int compare(Map.Entry<String,Integer> arg0, Map.Entry<String,Integer>  arg1) 
                {
                    return arg0.getKey().compareTo(arg1.getKey());
                }
             });
//3.list就是一個排好的map的集合
        for(Map.Entry<String,Integer>e:list)
        {
            if(e.getValue()>1)
                System.out.println(e.getKey()+" "+e.getValue());
        }
    }
}