华为OD机试题:字符串的解压缩

题目描述:

有一种简易压缩算法:针对全部为小写英文字母组成的字符串, 将其中连续超过两个相同字母的部分压缩为连续个数加该字母 其他部分保持原样不变. 例如字符串aaabbccccd 经过压缩变成字符串 3abb4cd
请您编写解压函数,根据输入的字符串,判断其是否为合法压缩过的字符串。
若输入合法则输出解压缩后的字符串,否则输出字符串”!error”来报告错误。


输入描述:

输入一行,为一个ASCII字符串
长度不超过100字符
用例保证输出的字符串长度也不会超过100字符


输出描述:

若判断输入为合法的经过压缩后的字符串
则输出压缩前的字符串
若输入不合法 则输出字符串”!error”


示例

1.输入:

4dff
输出:ddddff
说明:

4d扩展为4个d ,故解压后的字符串为ddddff
2.输入:

2dff
输出:!error
说明:

2个d不需要压缩 故输入不合法
输入:

4d@A
输出:!error
说明:

全部由小写英文字母组成的字符串,压缩后不会出现特殊字符@和大写字母A 故输入不合法

#解题想法:特殊情况考虑,1.2dff;2.4d@A,3.4d3ff


while 1:
        try:
            s= "4d3ff"
            res=""
            l=[]


            if len(s)>2:
                j=0
                while j+2<len(s):
                    print(j)
                    if s[j].isnumeric() and s[j+1].isalpha() and s[j+1]==s[j+2]:
                        l.append("!error")
                        print("!error")
                        j=len(s)
                    else:
                        j+=1


            if "2" in s or not s.isalnum():
                l.append("!error")
                print("!error")
            else:
                for i in range(len(s)):
                    if s[i].isdigit():
                        res+=s[i+1]*(int(s[i])-1)
                    else:
                        res+=s[i]
            if l.count("!error")>0:
                print("!error")
            else:
                print(res)

            break


        except Exception as e:
            print(e)
            break

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容