使用集合存储当前的种类,同时举例子可知长度为 i 的一共有 4^i 种
#include <iostream>
#include <cmath>
#include <unordered_set>
using namespace std;
int main() {
string str;
while (cin >> str) {
int length = str.length();
unordered_set<string> st;
string substring;
for (int i = 1; i <= length; i++) {
// 清空集合,仅计算当前长度的种类数
st.clear();
// 遍历并截取对应长度的字符,插入集合中
for (int j = 0; j < length - i + 1; j++) {
substring = str.substr(j, i);
st.insert(substring);
}
// 长度为 i 的种类总数是 4^i
if (st.size() != pow(4, i)) {
cout << i << endl;
break;
}
}
}
return 0;
}
时间复杂度:
1、最外层while循环会根据输入的字符串进行迭代,时间复杂度取决于输入字符串的长度,设为n
2、外层遍历所有可能的子字符串长度,时间复杂度为O(n);内层遍历字符串的所有可能起始位置,时间复杂度为O(n)
综上所述,总时间复杂度为O(n^2)
空间复杂度:
1、字符串变量str的空间复杂度为O(n)
2、无序集合st的空间复杂度取决于子字符串的数量,最坏情况下为O(n^2)
综上所述,总空间复杂度为O(n^2)

京公网安备 11010502036488号