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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值