實現HashMap排序
阿新 • • 發佈:2018-11-12
自己刷線上程式設計題用到好多次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()); } } }