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

如何修改字符串解密代码以支持多位数与多字符重复?

问题描述

需要解密类似a12b20(a重复12次、b重复20次)、cd3(cd重复3次)的压缩字符串,获取解密后字符串的第k个字符(1-based索引)。现有kThCharaterOfDecryptedString函数仅支持单数字重复,遇到多位数时无输出,添加多位数处理逻辑后出现运行时错误,寻求代码修改建议。

原错误代码

def kThCharaterOfDecryptedString(s, k):
    compress_str = ""
    str1 = ""
    lastdigit = ""
    i = 0
    while i<len(s):
        str1 += s[i]
        if str1.isdigit() == True:
            for char in range(int(str1)):
                compress_str += lastdigit
            lastdigit = ""
        else:
            str1 = ""
            compress_str += s[i]
            if len(lastdigit) == True:
                lastdigit += s[i] 
            else:
                lastdigit = s[i]
        i += 1
    if k in range(len(compress_str)):
        return compress_str[(k-1) % len(compress_str)]
    else:
        return -1
s = 'a12b20'
k = 8 
print(kThCharaterOfDecryptedString(s, k))

代码问题分析

  • 多位数处理失效:原代码每次仅读取单个字符判断是否为数字,无法识别连续多位数(如12会被拆成两次处理),导致重复次数计算完全错误。
  • 拼接逻辑混乱:非数字分支中直接将当前字符加入结果串,导致前缀字符被额外多添加一次(比如a先被加1次,再按次数重复,实际重复次数多了1次)。
  • 变量逻辑错误:lastdigit变量名与实际存储的前缀字符串不符,且len(lastdigit) == True的判断不规范,非零长度都会被视为True,逻辑易出错。
  • 内存效率低下:直接生成完整解密字符串,当重复次数极大时会占用大量内存,甚至引发崩溃。

修正方案与代码

核心思路

  1. 分段解析:遍历字符串时,先收集连续非数字字符作为前缀,再收集连续数字作为重复次数。
  2. 定位分段而非生成全串:通过计算各分段总长度,直接判断k落在哪个分段,再计算具体字符,避免内存浪费。
  3. 修正变量与判断逻辑:明确区分前缀和重复次数的存储,修复错误的条件判断。

修正后的代码

def kThCharaterOfDecryptedString(s, k):
    n = len(s)
    i = 0
    while i < n:
        # 收集连续的非数字前缀
        prefix = ""
        while i < n and not s[i].isdigit():
            prefix += s[i]
            i += 1
        # 收集连续的数字作为重复次数
        num_str = ""
        while i < n and s[i].isdigit():
            num_str += s[i]
            i += 1
        repeat = int(num_str) if num_str else 1  # 无数字时默认重复1次
        prefix_len = len(prefix)
        total_len = prefix_len * repeat
        
        # 判断k是否在当前分段内
        if k <= total_len:
            # 计算前缀中的具体位置
            pos = (k - 1) % prefix_len
            return prefix[pos]
        else:
            # 减去当前分段长度,继续查找下一段
            k -= total_len
    # 输入无效时返回-1
    return -1

# 测试用例
s = 'a12b20'
k = 8 
print(kThCharaterOfDecryptedString(s, k))  # 输出 'a'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:23:14