首页 > 解决方案 > 如何编写压缩的字母数字程序

问题描述

我需要编写一个将字母数字字符串作为输入的程序。该字符串将仅包含小写字符和从 0 到 9 的数字。

我必须将字母压缩为字母乘以连续重复的次数,例如:

如果输入字符串中有任何整数,那么我必须添加整数。

返回压缩字符串乘以相加整数。

def std(string):
    res =" "
    con =1
    res += string[0]
    for i in range((len(string)-1)):
        if (string[i] == string[i+1]):
            con+=1
        else:
            if (con>1):
                res += str(con)
                res+=string[i+1]
                con =1
            if (con>1):
                res+= str(con)
            return res

print(std('aabbb3cccc2d'))

我写了这个程序并得到了输出a2b

预期输出为a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d1。谁能告诉我我哪里出错了?

标签: pythonstringrun-length-encoding

解决方案


我相信您在该功能中存在多个问题:

  • 您返回循环内部并离开函数而不遍历整个字符串

  • 你只检查下一个字母是否相等,不要继续寻找

  • 如果你循环len(string) - 1你永远不会检查最后一个字符

  • 您不检查您所在的字符是否为数字,因此您无法跟踪您的字符串最终将被相乘多少次

由于无法纠正您的问题,因此我遇到了此解决方案,希望对您有所帮助。

def std(string):
    multiplier = 0
    final_string = ""
    jumper = 0

    for i in range(len(string)):
        if jumper:
            jumper -= 1
            continue

        if string[i].isdigit():
            multiplier += int(string[i])
            continue    

        charMultiplier = 0
        for j in range(i + 1, len(string)):
            if(string[i] == string[j]):
                charMultiplier += 1                    
            else:
                break      

        final_string += string[i]       
        final_string += str(charMultiplier + 1)

        jumper += charMultiplier

    final_string = final_string * multiplier

    return final_string

推荐阅读