题目描述
给出一个01字符串(长度不超过100),求其每一个子串出现的次数。
输入描述:
输入包含多行,每行一个字符串。
输出描述:
对每个字符串,输出它所有出现次数在1次以上的子串和这个子串出现的次数,输出按字典序排序。
示例1
输入
10101
输出
0 2
01 2
1 3
10 2
101 2
解析
HashMap是个好东西,这道题只要先把字符串的所有子字符串全部分割出来然后存入一个list中,然后利用hashmap保存对应子字符串出现的次数,最后讲数目大于一的输出即可,原理简单,直接上代码.
代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String line;
while (input.hasNextLine()) {
line = input.nextLine();
parse(line);
}
}
private static void parse(String line) {
String subLine;
Map<String, Integer> map = new TreeMap<>();
ArrayList<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++) {
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();
}
}
}
}
题目难度不大,注意HashMap的相关用法即可。
网友评论