首页 > 编程语言 >字符串解压缩问题——贪心算法

字符串解压缩问题——贪心算法

时间:2023-05-31 10:33:01浏览次数:43  
标签:return 解压缩 pos start 算法 result stack def 贪心

 

import sys


def load_data():
    return sys.stdin.read()


def get_position_map(s):
    result = {}
    stack = []
    for i,c in enumerate(s):
        if c == "[":
            result[i] = -1
            stack.append(i)
        elif c == "]":
            if stack:
                pos = stack.pop()
                result[pos] = i
    return result


def decode_str(s, start, end, pos_map):
    def in_range(i, start, end):
        return start<=i<end

    def is_str(c):
        return ord('a')<=ord(c)<=ord('z') or ord('A')<=ord(c)<=ord('Z')

    def is_num(c):
        return ord('0') <= ord(c) <= ord('9')

    result = ""
    i = start
    while in_range(i, start, end):
        string = ""
        while in_range(i, start, end) and is_str(s[i]):
            string += s[i]
            i += 1

        if not in_range(i, start, end):
            return string

        digit = ""
        while in_range(i, start, end) and is_num(s[i]):
            digit += s[i]
            i += 1

        if not in_range(i, start, end):
            return string

        if pos_map[i] == -1:
            return string

        d_str = decode_str(s, i+1, pos_map[i], pos_map)
        result += string + d_str*int(digit)

        i = pos_map[i]+1
    return result


def main():
    encoded_str = load_data() # "abc3[xyz4[mn]" # "abc3[xyz"  # "abc2[xyz3[mn]]" #"aaabcbc" #"3[a]2[bc]"
    pos_map = get_position_map(encoded_str)
    decoded_str = decode_str(encoded_str, 0, len(encoded_str), pos_map)
    print(decoded_str)


if __name__ == "__main__":
    main()

  

标签:return,解压缩,pos,start,算法,result,stack,def,贪心
From: https://blog.51cto.com/u_11908275/6384767

相关文章

  • python dijkstra 最短路算法示意代码
     defdijkstra(graph,from_node,to_node):q,seen=[(0,from_node,[])],set()whileq:cost,node,path=heappop(q)seen.add(node)path=path+[node]ifnode==to_node:returncost,pathfora......
  • 第三代测序中基于德布鲁因图的长读错误纠正算法
    第三代测序中基于德布鲁因图的长读错误纠正算法摘要——PacBio单分子实时测序平台可以产生大量的长读序列,这对基因组的从头组装非常重要。尽管这些长读取具有15%的高错误率,但是由于它们的高错误率而放弃它们是不明智的。Illumina测序平台产生了长度在100bp左右的短读,错误率低,成本......
  • Codeforces #564 (Div. 2) C. Nauuo and Cards[贪心]
    题目链接:http://codeforces.com/contest/1173/problem/C 解题思路:很明显总的抽卡次数是不会超过2*n的。然后我们再将情况分成两种:1.编号1的卡片已经在里面了,并且最底部已经形成了一个1~x的连续的卡片,而且之后x+1,x+2都可以来得及补上,在这种情况下抽卡次数肯定就不会超过n了。2.......
  • 面向第三代测序技术的基因组长序列片段比对算法研究
    面向第三代测序技术的基因组长序列片段比对算法研究周佩霞湖南师范大学摘要:随着测序技术不断发展和改进,测得的基因组序列片段数据的特征也在不断变化。为适应当前第三代测序技术,基因组序列比对算法需要进行深入的研究和改进,以便更适合于处理第三代测序技术测得的长序列片......
  • 基于第三代测序技术的基因组SNP和Indel变异检测关键算法研究
    基于第三代测序技术的基因组SNP和Indel变异检测关键算法研究廖小青哈尔滨工业大学摘要:随着生活水平的提升,人们对于自身的好奇促使人们对基因进行研究。其中,变异是人类疾病的一个重要诱因,对变异进行研究可以推动基础生物学和医学的发展。相比于大区域基因组的结构变异,SNP......
  • 【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例
    全文链接:http://tecdat.cn/?p=32604原文出处:拓端数据部落公众号分析师:BaileyZheng和Lijie Zhang即使是同一种植物,由于生长的地理环境的不同,它们的特征会有所差异。例如鸢尾花,可分为山鸢尾、杂色鸢尾、维吉尼亚鸢尾。假设此时您得到了一朵鸢尾花,如何判断它属于哪一类呢?支......
  • SSTF算法
    oj:https://codefun2000.com/p/P1269学一个新东西multiset里面是排好序的可以存重复的值但是里面的值不能被修改否则就不能排序了可以用lower_bound(x),得到multiset中大于等于x的最小的数的位置autori=q.lower_bound(x)若x比multiset中的任何数字都要大,则会返回q.end......
  • 基于FPGA的LFSR16位伪随机数产生算法实现,可以配置不同的随机数种子和改生成多项式,包
    1.算法仿真效果vivado2019.2仿真结果如下:2.算法涉及理论知识概要LFSR(线性反馈移位寄存器)提供了一种在微控制器上快速生成非序列数字列表的简单方法。生成伪随机数只需要右移操作和XOR操作。LFSR完全由其多项式指定。例如,6千-次多项式与每个项存在用方程x表示6+x5+x4+x3......
  • 算法学习day34贪心part03-1005、134、135
    packageLeetCode.greedypart03;/***1005.K次取反后最大化的数组和*给你一个整数数组nums和一个整数k,按以下方法修改该数组:*选择某个下标i并将nums[i]替换为-nums[i]。*重复这个过程恰好k次。可以多次选择同一个下标i。*以这种方式修改数组后,返回......
  • 代码随想录算法训练营第七天|454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之
    第454题.四数相加II力扣题目链接(opensnewwindow)给定四个包含整数的数组列表 A,B,C,D,计算有多少个元组(i,j,k,l) ,使得 A[i]+B[j]+C[k]+D[l]=0。为了使问题简单化,所有的A,B,C,D具有相同的长度 N,且0≤N≤500。所有整数的范围在-2^28到2^28......