第十届蓝桥杯C组——试题 C: 不同子串

试题 C: 不同子串 本题总分:10 分
【问题描述】
       一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成 的串。例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共 7 个。 注意在计算时,只算本质不同的串的个数。 请问,字符串0100110001010001 有多少个不同的非空子串?
答案:100
题解:这道题涉及到字符串的分割,在java中substring(int,int)可以用于分割字符串,所以我们可以用两个for循环嵌套,将所有可能出现的字符串一个一个添加到list集合(list的长度是动态的,而数组的长度是固定的),最后加一个判断条件是否list中出现过这个字符串
解法一 List集合解法

public static void main(String[] args) {
        String a="0100110001010001";
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < a.length(); i++) {
            for (int j = i+1; j <= a.length(); j++) {
                if (!list.contains(a.substring(i,j))) {
                    list.add(a.substring(i,j));
                }
                
            }
        }
        System.out.println(list.size());
}

解法一 Set集合解法
Set集合与List集合的区别就是,Set集合的元素不能重复,List集合的元素是可以重复的,所以我们可以简化了判断是否list存在元素的过程;

public static void main(String[] args) {
    String a="0100110001010001";
    Set<String> set = new HashSet<String>();
    int count=0;
    for (int i = 0; i < a.length(); i++) {
        for (int j = i+1; j <= a.length(); j++) {
            
            set.add(a.substring(i,j));
        }
    }
    System.out.println(set.size());
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 七月十五中元节,整个中国处处烟火缭绕。 突发一想,全国这么多纸香扎彩,要用多少人力物力去生产,最后的目的是烧掉,从...
    易简堂主阅读 276评论 1 1
  • 关于电影《被嫌弃的松子的一生》(以下简称《松子》),最先接触到的是片中插曲。初听时,只是觉得钢琴版的纯音乐特别好听...
    临叙阅读 220评论 1 1
  • 梅花妆 文/静怡的兰苑 “墙角数枝梅,凌寒独自开”,在我的意念里,梅通常...
    静怡的兰苑阅读 2,929评论 52 74