一个字符串的非空子串是指字符串中长度至少为 1的连续的一段字符组成的串。例如,字符串 aaab 有非空子串 a, b, aa, ab, aaa, aab, aaab,一共 7 个。注意在计算时,只算本质不同的串的个数。
请问,字符串 01001100010100010100110001010001 有多少个不同的非空子串?
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
#include <iostream> #include <set> using namespace std; int main() { string str = "0100110001010001"; int n = str.size(); //计算字符串的长度 set<string> s; for (int i = 0; i < n; i++) { for (int j = 1; i + j <= n; j++) { string t = str.substr(i, j); //在字符串str中,从下标为i开始,截取长度为j的子串 s.insert(t); } } cout << s.size() << endl; return 0; }
知识点学习:
-
使用 strcpy()、strcat()、strlen()、strstr() 等,需要加上头文件<cstring>,但是c_str()、length()、substr() 等函数,并不是在 <cstring> 头文件中定义的,而是在 <string> 头文件中定义的。因此,如果只使用 <string> 头文件中的函数,则不需要包含 <cstring> 头