Python一个字符串的非空子串是指字符串中长度至少为 1 的连续的一 段字符组成的串。例如,字符串 aaab 有非空子串 a, b, aa, ab, aaa, aab, aaab,一共 7 个。注意在计算时,只算本质不同的串的个数。 请问: 字符串 0100110001010001 有多少个不同的非空子串?
时间: 2024-03-08 21:46:31 浏览: 137
快速求一个字符串的非空子串(不相同)的数量
5星 · 资源好评率100%
首先,该字符串的长度为 16,长度至少为 1 的连续子串的数量为 1 + 2 + 3 + ... + 16,即等差数列求和公式 (1 + 16) * 16 / 2 = 136。但是还要去重,即计算本质不同的子串数量。
我们可以使用哈希表来记录出现过的子串,具体实现如下:
```python
s = '0100110001010001'
substrings = set()
for i in range(len(s)):
for j in range(i + 1, len(s) + 1):
substrings.add(hash(s[i:j]))
print(len(substrings))
```
其中,hash 函数将子串转换为一个唯一的整数,加入到哈希表中。最终,输出哈希表元素的数量即为不同的非空子串数量。运行结果为 85。
阅读全文