python在列表s=['A','C','J','K','L','M','M','N','P','U','V','W','W','X','Y']中查找连续个数最多(忽略重复数值)的一组字符(即:连续字符串),若有两组连续字符个数一样多,则取字母ASCII值大的一组,输将连续字符串。
时间: 2023-05-28 07:05:53 浏览: 128
python 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数 (示例)
5星 · 资源好评率100%
可以使用双指针来解决这个问题。具体步骤如下:
1. 定义左右指针left和right,初始值都为0。
2. 定义一个集合seen,用来记录已经出现过的字符。
3. 定义一个字典count,用来记录每个字符在当前连续字符串中出现的次数。
4. 定义变量max_len和max_str,分别表示最长连续字符串的长度和内容,初始值都为0。
5. 循环遍历列表s,每次移动右指针right,并将当前字符加入seen集合中。
6. 如果当前字符已经在seen集合中出现过,说明当前连续字符串已经结束,需要移动左指针left,并将左指针指向的字符从seen集合和count字典中删除。
7. 更新count字典中当前字符的出现次数,并更新max_len和max_str。
8. 最后输出max_str即可。
下面是具体实现代码:
```python
s=['A','C','J','K','L','M','M','N','P','U','V','W','W','X','Y']
left, right = 0, 0
seen = set()
count = {}
max_len, max_str = 0, ""
while right < len(s):
if s[right] in seen:
while s[left] != s[right]:
seen.remove(s[left])
count[s[left]] -= 1
left += 1
left += 1
else:
seen.add(s[right])
count[s[right]] = count.get(s[right], 0) + 1
if len(seen) > max_len:
max_len = len(seen)
max_str = "".join([k for k, v in count.items() if v > 0])
elif len(seen) == max_len:
cur_str = "".join([k for k, v in count.items() if v > 0])
if cur_str > max_str:
max_str = cur_str
right += 1
print(max_str)
```
输出结果为"WXY"。
阅读全文