首页 > 试题广场 >

子串计算

[编程题]子串计算
  • 热度指数:9914 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给出一个01字符串(长度不超过100),求其每一个子串出现的次数。

输入描述:
输入包含多行,每行一个字符串。


输出描述:
对每个字符串,输出它所有出现次数在1次以上的子串和这个子串出现的次数,输出按字典序排序。
示例1

输入

10101

输出

0 2
01 2
1 3
10 2
101 2
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String one_zero_string = in.nextLine();
        TreeMap<String,Integer> map = new TreeMap<>();
        int len = one_zero_string.length();
        for(int i = 0;i<len;i++){
            for(int j = i;j<=len;j++){
                String key = one_zero_string.substring(i,j);
                map.put(key,map.getOrDefault(key,0) + 1);
            }
        }
        for(String str:map.keySet()){
           if(str.equals("")) continue;
           if(map.get(str) > 1) System.out.println(str + " " + map.get(str));
        }
    }
} 

发表于 2023-03-08 21:55:58 回复(0)
import java.util.*;
public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()) {
			String str=sc.next();//先找子串,再统计次数
			Map<String,Integer>map=new TreeMap<>();
			for(int i = 0; i < str.length(); i++){
	            for (int j = i+1; j<=str.length(); j++){
	                String s=str.substring(i,j);
	                int fre=map.getOrDefault(s, 0);
	                map.put(s, fre+1);
	            }
	        }
			for(Map.Entry<String, Integer>entry:map.entrySet()) {
				if(entry.getValue()!=1) 
					System.out.println(entry.getKey()+" "+entry.getValue());
			}
		}
	}	
}

发表于 2020-04-12 19:25:53 回复(0)
Java 解法
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        TreeMap<String, Integer> map = new TreeMap<>();
        for (int i = 0; i < s.length(); i++) {
            for (int j = i; j <s.length(); j++) {
                String s1 = s.substring(i, j+1);
                map.merge(s1, 1, Integer::sum);
            }
        }
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            if (entry.getValue()>1){
                System.out.println(entry.getKey()+" "+entry.getValue());
            }
        }
    }
}


发表于 2020-03-06 14:55:35 回复(0)