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(后缀数组求不同子串个数,好题)