You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现从stdin输入中提取最长连续大写字母序列?

提取最长连续大写字母序列的实现思路与代码

嘿,这个需求其实挺常见的,核心就是在遍历过程中跟踪当前连续大写序列和历史最长序列,不用太复杂的计数器,直接用字符串变量维护就很直观。我给你拆解一下思路,再附上Python的实现代码(毕竟处理字符串Python太顺手了):

核心逻辑步骤

  • 初始化两个字符串变量:
    • current_upper:用来临时存储当前正在积累的连续大写字母
    • longest_upper:记录遍历过程中找到的最长大写序列
  • 逐个遍历输入字符串的每个字符:
    1. 如果当前字符是大写字母,就把它追加到current_upper里,然后立刻和longest_upper对比长度——如果更长,就更新longest_upper
    2. 如果遇到非大写字母,先检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:25:14