LQ0095 不同子串【set+substring】

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

题目描述
一个字符串的非空子串是指字符串中长度至少为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;
}

版权声明:本文为tigerisland45原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。