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

猜你喜欢

转载自blog.csdn.net/qq_33420835/article/details/82771142