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

编写find_longest_string函数:统计矩阵对角线字母并找最长串

优化矩阵右上三角对角线最长重复字母字符串查找函数

需求回顾

实现Python函数find_longest_string(legoString, n):

  • 将输入的legoString转换为n列的矩阵
  • 从矩阵的右上三角区域的所有左上到右下对角线上,找出某一字母出现次数最多的字符串(即该字母重复对应次数的结果)
  • 若存在多个长度相同的最优解,返回任意一个即可

原代码存在的问题

  1. 核心逻辑错误:没有遍历对角线,反而在同一行内比较相邻字符,完全偏离了“对角线统计”的需求
  2. 硬编码字母:仅处理R、B、G、Y、C五种字母,新增字母时会直接失效
  3. 长度判断逻辑混乱:比如len(countr) >= len(countb) and len(countg) and len(county) and len(countc)中,len(countg)是判断长度是否非零,不是比较长度大小,导致返回结果完全不符合预期
  4. 未区分右上三角区域:没有筛选出右上三角的对角线,遍历范围错误

优化后的代码

from collections import defaultdict

def find_longest_string(legoString, n):
    # 将字符串转为n列的二维矩阵
    row_count = len(legoString) // n
    matrix = [list(legoString[i*n : (i+1)*n]) for i in range(row_count)]
    
    max_occurrence = 0
    target_char = ''
    
    # 遍历右上三角的所有左上到右下对角线(j - i = k,k >= 0)
    for k in range(n):
        diagonal_chars = []
        i, j = 0, k
        # 收集这条对角线上的所有字符
        while i < row_count and j < n:
            diagonal_chars.append(matrix[i][j])
            i += 1
            j += 1
        
        # 统计当前对角线的字母出现次数
        count_map = defaultdict(int)
        for char in diagonal_chars:
            count_map[char] += 1
        
        # 更新全局最大出现次数和对应字母
        if count_map:
            current_max = max(count_map.values())
            current_char = max(count_map, key=count_map.get)
            if current_max > max_occurrence:
                max_occurrence = current_max
                target_char = current_char
    
    # 返回结果:目标字母重复max_occurrence次
    return target_char * max_occurrence

代码逻辑说明

  1. 矩阵转换:按n列分割输入字符串,得到二维矩阵,方便后续对角线遍历
  2. 对角线遍历:右上三角的对角线可通过j - i = k(k为非负整数)确定,从第一行的不同列出发,向下向右收集对角线上的所有字符
  3. 字母统计:用defaultdict统计每条对角线的字母出现次数,避免硬编码限制
  4. 结果筛选:记录所有对角线中出现次数最多的字母和次数,最后返回该字母重复对应次数的字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:55:17