java算法练习_JAVA 算法练习(三)

拆解排序问题

后缀子串排序

题目:

对于一个字符串,将其后缀子串进行排序,例如grain 其子串有: grain rain ain in n 然后对各子串按字典顺序排序,即: ain,grain,in,n,rain

解题思路:

先将字符串经行拆解,然后将拆解后的字符串进行字典顺序排序

代码:

import java.util.Arrays;

import java.util.Scanner;

public class Main {

public static String[] sT(String s) {

String[] result = new String[s.length()];

for (int i = 0; i < s.length(); i++)

result[i] = s.substring(i); // 从i到末尾截取字符串

Arrays.sort(result); // 进行字典顺序排序

return result;

}

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

while (sc.hasNext()) {

String s = sc.nextLine();

String[] result = sT(s);

for (String c : result) {

System.out.println(c);

}

}

}

}

子串计算

题目:

给出一个01字符串(长度不超过100),求其每一个子串出现的次数。对每个字符串,输出它所有出现次数在1次以上的子串和这个子串出现的次数,输出按字典序排序。

例如:10101 ,输出结果为:

0 2

01 2

1 3

10 2

101 2

解题思路:

将字符串进行拆解,拆解方式不同于上一题,拆解结果为所有相邻的子串。再将拆解子串经行排序,然后输出。

代码:

import java.util.*;

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

while (sc.hasNext()) {

Map count = new HashMap<>();

String s = sc.nextLine();

for (int i = 0; i < s.length(); i++) {

for (int j = i + 1; j <= s.length();j++) {

String temp = s.substring(i, j); // substring 范围(i—(j-1))

if (count.get(temp) == null) { // 查看该子串是否出现过,否则将其以key值添加到map中,value值为1

count.put(temp, 1);

} else {

int value = count.get(temp); // 是则提取该key值的value值,并使value值加1

count.put(temp, ++value);

}

}

}

Collection keys = count.keySet(); // 提取所有的key值

List list = new ArrayList<>(keys);

Collections.sort(list); // 无第二个参数,默认升序

for (String str : list) {

if (count.get(str) > 1) {

System.out.println(str + " " + count.get(str));

}

}

}

}

}

以上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值