LQ0095 不同子串set+substring

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0095 不同子串set+substring相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2019初赛 Java B组J题

题目描述
一个字符串的非空子串是指字符串中长度至少为1 的连续的一段字符组成的串。
例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共7 个。
注意在计算时,只算本质不同的串的个数。
请问,字符串0100110001010001 有多少个不同的非空子串?

问题分析
用枚举法来实现。
取出所有的子串,放入集合中,统计集合元素的数量。

AC的C++语言程序如下:

/* LQ0095 不同子串 */

#include <iostream>
#include <set>

using namespace std;

int main()

    string s = "0100110001010001";
    set<string> st;

    for (int i = 0; i < s.length(); i++)
        for (int j = 1; j <= s.length(); j++)
            st.insert(s.substr(i, j));

    cout << st.size() << endl;

    return 0;

以上是关于LQ0095 不同子串set+substring的主要内容,如果未能解决你的问题,请参考以下文章

New Distinct Substrings(不同子串数)(后缀数组)

SPOJ Distanct Substrings(求不同子串的数量)

SPOJ 694 || 705 Distinct Substrings ( 后缀数组 && 不同子串的个数 )

SPOJ Distinct Substrings(后缀数组求不同子串个数,好题)

LeetCode 647. 回文子串(Palindromic Substrings)

牛客多校2018第一场 I Substring (不同子串的个数)