[蓝桥杯2019初赛]不同子串
题意:一个字符串的非空子串是指字符串中长度至少为1 的连续的一段字符组成的串。
例如,字符串aaab 有非空子串a, b, aa, ab, aaa, aab, aaab,一共7 个。
注意在计算时,只算本质不同的串的个数。
请问,字符串0100110001010001 有多少个不同的非空子串?
1 #include <iostream> 2 #include <algorithm> 3 #include <set> 4 #include <cstring> 5 #include <string> 6 #include <stdio.h> 7 #define rep(i,a,b) for(int i=(a);i<=(b);++i) 8 #define per(i,a,b) for(int i=(a);i>=(b);++i) 9 using namespace std; 10 const int N=1e3+7; 11 typedef long long ll; 12 int main() 13 { 14 string s="0100110001010001"; 15 set<string>ans; 16 int len=s.size(); 17 rep(i,0,len-1){ 18 rep(j,0,len-1){ 19 string ss=s.substr(i,j); 20 ans.insert(ss); 21 } 22 } 23 printf("%d\n",ans.size()); 24 return 0; 25 }
substr()函数
string s;
s.substr(start,length);
start:字符串的起始位置
正数:字符串指定位置开始。
负数:在字符串结尾的指定位置开始。
0:在字符串的第一个字符处开始。
length:返回字符串的长度,默认是到字符串结尾的位置。
正数:从规定的起始位置返回。
负数:字符串结尾末端返回。
返回值:返回字符串的提取部分,失败返回false,或者返回一个空字符串。
永远年轻 永远热泪盈眶!