求其每一个子串出现的次数

*求其每一个子串出现的次数

  • 要求:对每个字符串,输出它所有出现的次数在1次以上的子字符串,和这个子字符串出现的次数并按字典顺序排序(由小到大)·
  • 例如:abcabcdef.
  • a----3
    ab----2
    abc----2
    b----2
    bc----2
    c----2
    */
    方式一:list集合 HashMap 数组
import java.util.*;
public class zjtdTest {
    public static void main(String[] args) {
        String str = "aabcabcdef";
        String  substr;
        int num=0;//记录次数
        List<String> list = new ArrayList<>();
        List<String> towlist=new ArrayList<>();
        Map<String,Integer> map=new HashMap<>();
        //将字符串所有的组合存到list集合中
        for (int i = 0; i < str.length(); i++) {
            for (int j = i+1; j < str.length()+1; j++) {
                //截取原字符串所有的组合
                substr=str.substring(i,j);
                list.add(substr);
            }

        }

        Set<String > set=new HashSet<>();
        for (int i = 0; i < list.size(); i++) {
            set.add(list.get(i));
        }

//        for (String str1:list) {
//            System.out.print(str1+" ");
//        }
        System.out.println();
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()){
            String next = iterator.next();
            for (int i = 0; i < list.size(); i++) {
                if(next.equals(list.get(i))){
                    num++;
                }
            }
            if(num>=2){
                System.out.println(next+"------"+num);
                map.put(next,num);
                towlist.add(next);
                num=0;
            }else {
                num=0;
            }
        }

        for (int i = 0; i < towlist.size()-1; i++) {
            for (int j = 0; j < towlist.size()-1-i; j++) {
                String s1=towlist.get(j);
                String s2=towlist.get(j+1);
                char[] chars1 = s1.toCharArray();
                char[] chars2 = s2.toCharArray();
                for (int k = 0; k < chars1.length&&k<chars2.length; k++) {

                        if(chars1[k]==chars2[k]&&chars1.length>chars2.length){
                         //交换这个list集合中的两个元素
                        String temp=towlist.get(j);
                        towlist.set(j,towlist.get(j+1));
                        towlist.set(j+1,temp);
                    }else if(chars1[k]>chars2[k]){
                        String temp=towlist.get(j);
                        towlist.set(j,towlist.get(j+1));
                        towlist.set(j+1,temp);
                        //交换后跳出循环
                        break;
                    }
                }
            }

        }

        System.out.println("***************");
        for (String str2:towlist) {
            System.out.print(str2+" ");
        }
        System.out.println();
        System.out.println("------------");
        for (int i = 0; i < towlist.size(); i++) {

            Integer integer = map.get(towlist.get(i));
            System.out.println(towlist.get(i)+"----"+integer+" ");

        }
    }

}


方式二: TreeMap

import java.util.*;

/**
 * 求其每一个子串出现的次数
 * 要求:对每个字符串,输出它所有出现的次数在1次以上的子字符串,和这个子字符串出现的次数并按字典顺序排序
 */
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String line = null;
        while (input.hasNextLine()) {
            line = input.nextLine();
            parse(line);
        }
    }

    private static void parse(String line) {
        String subLine = null;
        Map<String, Integer> map = new TreeMap<>();
        List<String> list = new ArrayList<>();
        for (int i = 0; i < line.length(); i++) {
            for (int j = i + 1; j <= line.length(); j++) {
                //截取子串所有的可能
                subLine = line.substring(i, j);
                //
                if (subLine.length() != line.length()) {
                    list.add(subLine);
                    map.put(subLine, 0);
                }
            }
        }
        for (int i = 0; i < list.size(); i++) {
            //map中的键值与list集合比较如果
            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.println(entry.getKey() + " " + entry.getValue());
                System.out.println();
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值