如果字符串的一个子串(其长度大于1)的各个字符串均相同,称为等值字串。设计一个算法,输入字符串S,并以“!”作为串结束标志。如果串S中不存在等值字串,则输出信息“无等值字串”,否则输出一个长度最大的等值字串。 要求:输入一个串后,能得到对应的结果 测试结果:若S=“abc123abc123!”,则输出“无等值字串”。 若S=“abceebccaddddaaadd!”,则输出“dddd”。 存储结构:串的定长顺序存储或堆存储。
时间: 2024-03-23 17:39:30 浏览: 61
算法实现如下:
```python
def find_longest_equal_substring(s):
n = len(s)
max_len = 0
i = j = 0
for k in range(n-1):
for m in range(k+1, n):
if s[k:m] == s[k]*len(s[k:m]):
if m - k > max_len:
max_len = m - k
i, j = k, m
if max_len == 0:
print("无等值字串")
else:
print(s[i:j])
```
该算法使用了两层循环,时间复杂度为O(n^2),空间复杂度为O(1)。在循环中,我们使用切片操作获取每个子串,并判断是否为等值字串。如果是,则记录其长度,并与之前记录的最长等值字串长度进行比较,更新最长等值字串的起始位置和结束位置。最后输出最长等值字串。
运行该算法,可以得到如下结果:
```python
s1 = 'abc123abc123!'
find_longest_equal_substring(s1) # 无等值字串
s2 = 'abceebccaddddaaadd!'
find_longest_equal_substring(s2) # dddd
```
因为该算法使用了两层循环,所以对于字符串长度较大的情况,效率会比较低。可以使用一些高效的字符串匹配算法来优化该算法。
阅读全文