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

CodeWars连续字符串拼接问题代码无法通过随机测试求助

解决CodeWars连续字符串拼接问题的代码排查与修正

问题说明

给定字符串数组strarr和整数k,需返回数组中k个连续字符串拼接成的首个最长字符串。现有代码通过了示例测试,但无法通过随机测试。

现有代码问题分析

第一个版本代码逻辑错误

strarr = []

def longest_consec(strarr, k):
    strarr.append('')
    length = len(strarr)
    cons_list = []
    end = k
    start = 0
    freq = -length/2
    final_string = []
    largest = max(strarr, key=len, default='')
    if k == 1:
        return largest
    elif 1 < k < length:
        while(freq <= 1):
            cons_list.append(strarr[start:end])
            start += k-1
            end += k-1
            freq += 1
        for index in cons_list:
            final_string.append(''.join(index))
        return max(final_string, key=len, default='')  
    else:
        return ""
  • 错误点:
    1. 手动给输入数组strarr追加空字符串,改变了原数组的长度和内容,导致后续计算完全偏离预期。
    2. while循环逻辑完全错误,通过freq和跳步k-1的方式选取连续子数组,仅能覆盖极少数情况,漏掉了绝大多数可能的连续k个字符串组合。
    3. 当k=1时,返回的是修改后数组中的最长字符串,而非原数组的结果。

第二个版本代码覆盖不全

strarr = []

def longest_consec(strarr, k):
    strarr.append('')
    length = len(strarr)
    largest = max(strarr, key=len, default='')
    pos = int(strarr.index(largest))
    if k == 1:
        return largest
    elif 1 < k < length:
        prev_string = ''.join(strarr[pos+1-k:pos+1])
        next_string = ''.join(strarr[pos:pos+k])
        if len(prev_string) >= len(next_string):
            res = prev_string
        else: 
            res = next_string
        return res
    else:
        return ""

print(longest_consec(["zone", "abigail", "theta", "form", "libe"], 2))
  • 错误点:
    1. 同样修改了原输入数组,导致索引计算错误。
    2. 仅围绕单个最长字符串的前后拼接组合进行比较,完全忽略了其他连续k个字符串拼接后长度更长的情况。
    3. 若数组中有多个长度相同的最长字符串,index只会返回第一个出现的位置,遗漏其他可能的最优组合。

正确代码实现

def longest_consec(strarr, k):
    n = len(strarr)
    # 处理边界情况:k无效或数组为空
    if k <= 0 or k > n or n == 0:
        return ""
    
    max_length = -1
    result = ""
    
    # 遍历所有可能的连续k个字符串的起始索引
    for i in range(n - k + 1):
        # 拼接当前连续k个字符串
        current = ''.join(strarr[i:i+k])
        current_len = len(current)
        # 更新最长字符串(优先保留第一个出现的)
        if current_len > max_length:
            max_length = current_len
            result = current
    
    return result

代码说明

  1. 边界处理:先判断k是否合法(k≤0或k超过数组长度),或数组为空时直接返回空字符串。
  2. 遍历所有可能组合:通过range(n - k + 1)获取所有合法的起始索引,确保能覆盖每一组连续的k个字符串。
  3. 记录最优结果:对每个拼接后的字符串计算长度,仅当当前长度大于已记录的最大长度时更新结果,保证返回的是首个最长的拼接字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:41:07