当前位置: 首页 > article >正文

leetcode hot100 字符串解码

394. 字符串解码

已解答

中等

相关标签

相关企业

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

class Solution(object):
    def decodeString(self, s):
        """
        :type s: str
        :rtype: str
        """

        # 先得到对应关系
        hashmap_end={}
        stack=[]
        for index,str_t in enumerate(s):
            if str_t=='[':
                stack.append(index)
                hashmap_end[index]=-1
            elif str_t==']':
                end = stack[-1]
                hashmap_end[end]=index
                stack.pop()
            



        hashmap = {}
        for i in range(10):
            hashmap[str(i)]=i

        # print(hashmap_end)
        # print(hashmap)
        def func_t(start,end):
            i=start
            rt_str=""
            repeat_num=0
            while i<end:
        
                if hashmap.get(s[i])==None and s[i]!='[' and s[i]!=']':
                    rt_str+=s[i]
                    i+=1
                elif hashmap.get(s[i])!=None:
                    # 读取数字然后递归调用
                    repeat_num = repeat_num*10 + int(s[i])
                    i+=1
                elif s[i]=='[':
                    # reapeat = int(repreat_num)
                    # stack.append(i)
                    tmp = func_t(i+1,hashmap_end[i])
                    rt_str = rt_str + tmp*repeat_num
                    i = hashmap_end[i]+1
                    repeat_num=0
                else:
                    print(s[i])

            
            return rt_str  
        return func_t(0,len(s))





上述是我自己的解法,主要解决的是括号里面还有括号的情况,就用迭代的方法解决,每次都返回括号内的输出结果,在呈上次数,缺点是需要提前的把括号的前后index准备好。

class Solution(object):
    def decodeString(self, s):
        """
        :type s: str
        :rtype: str
        """
        
        def dfs(i):
            multi = 0
            res=""
            while i< len(s):
                if s[i]=="[":
                    i,tmp = dfs(i+1)
                    res = res + multi*tmp
                    multi=0
                elif  s[i]>='0' and s[i]<='9':
                    multi = 10*multi +int(s[i])
                    i+=1
                    
                elif s[i]==']':
                    
                    return i+1 , res
                else:
                    res+=s[i]
                    i+=1
            return res
        return dfs(0)







这个是标准代码,直接把所有的迭代放到一起了


http://www.kler.cn/a/460589.html

相关文章:

  • 2024年大型语言模型(LLMs)的发展回顾
  • 出现 Error during query execution: StatementCallback; bad SQL grammar 解决方法
  • 图像概念与分类
  • 怎样在 Word 文档中插入附件(其他文件)?
  • leetcode------mysql
  • union的实际使用
  • [python SQLAlchemy数据库操作入门]-17.使用 Flask-SQLAlchemy:构建股票数据 API
  • lua和C API库一些记录
  • 【Rust自学】8.5. HashMap Pt.1:HashMap的定义、创建、合并与访问
  • Java重要面试名词整理(十七):Nacos
  • 深入浅出梯度下降与反向传播
  • 如何在没有 iCloud 的情况下将联系人从 iPhone 传输到 iPhone
  • MySQL 中的触发器:优点和缺点
  • 使用交换机构建简单局域网
  • 九垠赢+商业管理系统 Common.ashx 文件上传致RCE漏洞复现
  • 复合机器人赋能食品饮料加工行业向自动化升级改造
  • OpenCV相机标定与3D重建(39)计算校正畸变后的新相机内参矩阵函数getOptimalNewCameraMatrix()的使用
  • 数据的高级处理——pandas模块进阶——数据的查找和替换
  • Linux ipmitool工具使用笔记
  • 输入ssh-add ~/.ssh/login ,显示Enter passphrase for /c/Users/.ssh/login:
  • UniApp 原生插件开发指南
  • C# OpenCV机器视觉:车牌识别
  • 基于深度学习的语音识别系统实现:开启语音交互的新时代
  • VScode 格式化代码空格记录
  • Python软体中使用 Celery 与 RabbitMQ 实现高效异步任务队列:完整部署与实战指南
  • Webpack 优化全攻略:彻底解决 Vue 项目 npm run dev 的内存泄露问题