如何实现从stdin输入中提取最长连续大写字母序列?
提取最长连续大写字母序列的实现思路与代码
嘿,这个需求其实挺常见的,核心就是在遍历过程中跟踪当前连续大写序列和历史最长序列,不用太复杂的计数器,直接用字符串变量维护就很直观。我给你拆解一下思路,再附上Python的实现代码(毕竟处理字符串Python太顺手了):
核心逻辑步骤
- 初始化两个字符串变量:
current_upper:用来临时存储当前正在积累的连续大写字母longest_upper:记录遍历过程中找到的最长大写序列
- 逐个遍历输入字符串的每个字符:
- 如果当前字符是大写字母,就把它追加到
current_upper里,然后立刻和longest_upper对比长度——如果更长,就更新longest_upper - 如果遇到非大写字母,先检查
current_upper是不是比longest_upper长,是的话就更新最长序列,然后清空current_upper,准备下一轮积累
- 如果当前字符是大写字母,就把它追加到
- 遍历结束后别忘了再做一次对比!因为如果输入的最后一段是大写字母,不会触发非大写的判断逻辑,得手动收尾
代码实现(Python)
import sys def extract_longest_upper_sequence(): # 从标准输入读取全部内容,strip()可以去掉首尾的换行/空格(不需要的话可以删掉) input_content = sys.stdin.read().strip() current_upper = "" longest_upper = "" for char in input_content: if char.isupper(): current_upper += char # 每次追加后立即检查更新最长序列 if len(current_upper) > len(longest_upper): longest_upper = current_upper else: # 遇到非大写,先检查当前序列是否更长 if len(current_upper) > len(longest_upper): longest_upper = current_upper current_upper = "" # 重置当前序列 # 处理最后一段是大写的边界情况 if len(current_upper) > len(longest_upper): longest_upper = current_upper print(longest_upper) if __name__ == "__main__": extract_longest_upper_sequence()
测试示例
比如输入AbcEDFG,遍历过程是这样的:
- 遇到'A':
current_upper变成"A",longest_upper更新为"A" - 遇到'b'/'c':非大写,
current_upper长度和longest一样,不更新,清空current_upper - 遇到'E':
current_upper变成"E",比longest长,更新为"E" - 依次追加'D'/'F'/'G':
current_upper变成"EDFG",每次都更新longest_upper - 遍历结束,输出
EDFG,完全符合你的需求
如果需要其他语言的实现(比如C++/Java),可以告诉我,我再给你调整~
内容的提问来源于stack exchange,提问作者KyleMcCann
相关产品推荐
相关产品推荐

