算法笔记4------获取出现次数大于1的字串(JAVA)

题目:获取出现次数大于1的字串,以字典序(字串 出现次数)输出
(1)获取所有字串:
这一步比较简单

for(int i=0;i<str.length();i++) {
				for(int j=i+1;j<=str.length();j++) {
					substr = str.substring(i,j);//得到所有子串
					}
}

(2)如何存这些字串?想到了JAVA的一些集合框架:ArrayList可以存所有字串,类似于数组
Map以键值对形式存储,还可以去重,而且以字典序排序(出题者可能就是考Map,反正硬是用基本语言写,我就直接GG了)
声明一下:

Map<String, Integer> map = new TreeMap<String, Integer>(); //map可以自动进行字典排序且去重
		    ArrayList<String> list = new ArrayList<String>();

存储过程:

for(int i=0;i<str.length();i++) {
				for(int j=i+1;j<=str.length();j++) {
					substr = str.substring(i,j);//得到所有子串
					if (substr.length() != str.length()) {
					             list.add(substr);
					             map.put(substr, 0);//设定出现次数为0,后面遍历再获取正确的次数
					 }
				}
			}

比对过程

for (int i = 0; i < list.size(); i++) {
			            for (Map.Entry<String, Integer> entry : map.entrySet()) {
			                if (list.get(i).equals(entry.getKey())) {
			                    entry.setValue(entry.getValue() + 1);
			                }
			            }
 }

遍历输出

for (Map.Entry<String, Integer> entry : map.entrySet()) {
				            if (entry.getValue() > 1) {
				                System.out.print(entry.getKey() + " " + entry.getValue());
				                System.out.println();
				       }
			 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值