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

Hackerrank字符串题Capitalize!运行错误排查求助

修复Hackerrank Capitalize!问题的代码错误

原代码的问题

你的代码存在以下致命缺陷,导致无法通过大部分测试用例:

  1. 硬编码处理两个单词:仅能处理恰好两个单词的输入,遇到单个单词、三个及以上单词时,要么触发索引越界错误,要么丢失后续单词的处理。
  2. 错误处理空格:使用split(' ')分割字符串,会把连续空格拆分成空字符串元素,访问空字符串的索引[0]会直接报错;同时无法保留原始的空格数量。
  3. 冗余操作:list1=list(s)再拼接回字符串的步骤完全多余,没有任何实际作用。

修复方案(符合题目要求:保留原始空格布局)

题目要求每个单词的首字母大写,同时保留单词之间的空格数量,因此不能用split()合并空格,需要逐个字符处理:

def solve(s):
    # 将字符串转为列表,方便修改单个字符
    char_list = list(s)
    n = len(char_list)
    
    # 处理第一个字符:如果是字母则大写
    if n > 0 and char_list[0].isalpha():
        char_list[0] = char_list[0].upper()
    
    # 遍历后续每个字符
    for i in range(1, n):
        # 当前字符是字母,且前一个字符是空格 → 大写当前字符
        if char_list[i].isalpha() and char_list[i-1] == ' ':
            char_list[i] = char_list[i].upper()
    
    # 将列表转回字符串返回
    return ''.join(char_list)

备选方案(适合不要求保留空格数量的场景)

如果题目允许合并连续空格为单个空格,可以用更简洁的写法:

def solve(s):
    # split()无参数时自动忽略首尾空格、合并连续空格
    words = s.split()
    # 每个单词首字母大写,其余小写
    return ' '.join(word.capitalize() for word in words)

测试用例验证

修复后的代码可以处理所有场景:

  • 单个单词:"alice" → "Alice"
  • 多个单词:"john doe smith" → "John Doe Smith"
  • 连续空格:"hello world" → "Hello World"(保留三个空格)
  • 首尾空格:" hello world " → " Hello World "(保留首尾空格)
  • 包含非字母字符:"123abc def" → "123Abc Def"

内容的提问来源于stack exchange,提问作者Nav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:42:56