@Author:Runsen
@Date:2020/9/6

大四刷题拼offer系列,不拼不行啊。自己知道自己的数据结构算法很菜。而且2020/9/6今晚还有腾讯的笔试,祝我好运吧。自己知道成功的可能性很低,但还是刷下腾讯的算法题。

文章目录

  • 题目
  • 第一种思路
  • 第二种思路
  • 第三种思路

题目

题目:小Q想要给他的朋友发送一个神秘字符串,但是他发现字符串的过于长了,于是小Q发明了一种压缩算法对字符串中重复的部分进行了压缩,对于字符串中连续的m个相同字符串S将会压缩为[m|S](m为一个整数且1<=m<=100),例如字符串ABCABCABC将会被压缩为[3|ABC],现在小Q的同学收到了小Q发送过来的字符串,你能帮助他进行解压缩么?

'''
@Author: Runsen
@WeChat:RunsenLiu
@微信公众号: Python之王
@CSDN: https://blog.csdn.net/weixin_44510615
@Github: https://github.com/MaoliRUNsen
@Date: 2020/9/6输出一个字符串,代表解压后的字符串。输入例子1:
HG[3|B[2|CA]]F输出例子1:
HGBCACABCACABCACAF例子说明1:
HG[3|B[2|CA]]F−>HG[3|BCACA]F−>HGBCACABCACABCACAF
'''

这道题看似很简单,自己看着明白,脑子想明白了,但是就是敲不出,每次运行就是还有一个数据不合适,可能是内存的原因。其实关键就是如何找到[,|,]的index。

第一种思路

我相信很多人都是和我一样,直接找到直接遍历,如果遇到了第一个],就往会回遍历寻找[,|。这里遍历如果写for循环就觉得很难读懂,下面的代码j就是[的index,k就是|的index,i就是]的index。然后就是用replace,记作字符串是不可变类型,只能用replace,还有一种方法就是新建一个字符串,但是空间内存变大了。

if __name__=='__main__':s=input()i=0while(i<len(s)):if(s[i]==']'):j=ik=0while(s[j]!='['):if(s[j]=='|'):k=jj=j-1s1=s[j:i+1]num=int(s[j+1:k])sz=s[k+1:i]sz=sz*nums=s.replace(s1,sz,1)i=ji = i + 1print(s)

第二种思路

第二种思路还是遍历,但是想法和上面的不相同,就是找到]的index,就是break,同时储存前面的[的index,和|的index,这样就不断地进行递归解码,直到一个中括号都没有。

def decode(s):i = 0x, y, z = -1, -1, -1while i < len(s):if s[i] == '[':x = ielif s[i] == '|':y = ielif s[i] == ']':z = ibreaki += 1if x != -1 and y != -1 and z != -1:times = int(s[x + 1:y])  # 次数sub = s[y + 1:z]  # 子串decode_str = s[:x] + times * sub + s[z + 1:]  # 解码return decode(decode_str)  # 递归解码return s  # 如果一个中括号都没有,说明没有需要解码的部分if __name__ == '__main__':s = input()print(decode(s))

第三种思路

第三种思路就是使用正则,我是看别人都代码才知道的思路,通配符写成r"\[(\d+)\|(\w+)\]"这里的\表示转义的意思。search返回的结果是竟然可以通过span取值,这个是我学正则不知道的!!!!!!

import reline = input()
pattern = r"\[(\d+)\|(\w+)\]"
tmp = re.search(pattern, line)
print(tmp)
while tmp:l, r = tmp.span()[0], tmp.span()[1]cur = line[l:r]mid = cur.find("|")num = int(cur[1:mid])chs = cur[mid + 1:-1] * numline = line[:l] + chs + line[r:]tmp = re.search(pattern, line)print(tmp)
print(line)HG[3|B[2|CA]]F
<re.Match object; span=(6, 12), match='[2|CA]'>
<re.Match object; span=(2, 11), match='[3|BCACA]'>
None
HGBCACABCACABCACAF

看了腾讯第一道的解压字符串,就知道自己有多垃圾了。正因为自己垃圾,才需要不断地提高字自己的水平。

如果你想跟博主建立亲密关系,可以关注博主,或者关注博主公众号“Python之王”,了解一个非本科程序员是如何成长的。
博主ID:润森(weixin_44510615),希望大家点赞、评论、收藏

为了OFFER | 腾讯2020校招后端《解压字符串》相关推荐

  1. 【模拟】【递归】解压字符串(jzoj 1519)

    解压字符串 jzoj 1519 题目大意: 有一串压缩过的字符串,将有重复的压缩成了s(~~)的形式(s是一位数,例子:123123123压缩成'3(123)'),现在要你解压出来,然后输出长度 样例 ...

  2. python3 zlib 实现压缩与解压字符串与文件数据流

    关于python3 zlib 压缩解压情况总结如下: 字符串:使用zlib.compress方法压缩字符串,使用zlib.decompress方法解压字符串. 数据流:压缩:zlib.compress ...

  3. 腾讯云服务器文件解压,使用腾讯云函数SCF快速解压对象存储COS中的ZIP文件

    使用场景 在本实践中,我们用到了云 由于当前云函数每次运行时分配的临时存储空间为512MB,因此建议单个 zip 包的大小不大于300MB,解压出来的单个文件不大于200MB. 操作步骤 一.创建存储 ...

  4. Java 压缩解压字符串(支持中文)

    public static void main(String[] args) throws Exception{ String str ="xflush3.0个人感觉最大的特点就是监控配置非 ...

  5. C语言编写压缩解压字符串程序

    一.压缩函数编写 当输入字符串时,读取第一个字符,然后往后面数相同的字符,并记录相同字符个数,直到出现一个不同的字符为止,并记录该字符以及个数:然后记录读取紧接下来不同与第一个的字符,并以此记录后面连 ...

  6. 【Offer】ThoughtWorks 2020校招-国内-软件测试工程师 | 线上测评+群面+技术面+HR面(2019.8.4 - 8.22)

    岗位 软件测试工程师 Job Description https://join.thoughtworks.cn/recruitment/domestic 你可能想问我,数分好好的,为什么跑去软件测试了 ...

  7. Bilibili 2020校招 后端笔试试卷

    Bilibili后端笔试试卷 第一题:原地翻转字符串,要求空间复杂度O(1),时间复杂度 O(n) AC 100% 代码: import java.util.Scanner;/*** @author ...

  8. 用c语言如何解压字符串,C语言 解压华为固件的实例代码

    /*##################################################################### # #   文件          : unpack_u ...

  9. pako java_java压缩字符串,前端接收pako解压

    使用springboot开发 1.后端java代码压缩: ``` /** * 测试GZIP压缩之后返回给前端,前端使用pako解压缩 * @return * @throws IOException * ...

最新文章

  1. 三代测序关键计算技术开发及应用
  2. ubuntu下Tomcat7的安装和配置
  3. 为销售范围维护允许的销售凭证
  4. 【点分治】luoguP2664 树上游戏
  5. java 替换多个字符串_Java一次(或以最有效的方式)替换字符串中的多个不同子字符串...
  6. linux 管道 top,linux IPC总结——管道
  7. iphone天行连接不上服务器未响应,天行连接不上 - 卡饭网
  8. [转]php连接postgresql
  9. typecho运行html插件,typecho主题集成HTML压缩功能
  10. GitHub排名第一!免费最”强“12306抢票神器,程序员再不用跪求加速包!
  11. 神舟k650d i5 d3安装EI Capitan问题总结
  12. 视频下载工具you-get(哔哩哔哩巨好用)
  13. 如何使用STM32F1/F4驱动CS5463
  14. 餐饮行业如何精准轻松获客,短期内使营业额倍增
  15. xmlDocument是什么?(转)
  16. java pdf转图片base64,itextpdf 实现html转pdf中中文及图片base64的解决方法
  17. 同一个用户异地登陆踢人操作
  18. 若今生长剑浣花,生死无涯
  19. 从联想昭阳到MacBook Pro,致我的那些败家玩意—
  20. 小铃铛shake动画

热门文章

  1. Cpp 对象模型探索 / 虚基类表作用
  2. caffe linux 教程,CentOS7安装Caffe的教程详解
  3. jpa 自定义sql if_数据产品经理必备之SQL基础
  4. vnc远程无法关闭窗口_无法启动远程桌面服务(VNC)[关闭]
  5. vxworks操作系统_【7.10开播】最新自主研发工业操作系统发布会行业top来助阵,邀您共同见证(附报名)...
  6. php 打印变量内存地址_Python合集之Python变量
  7. python顺序结构实验设计_实验二 顺序结构程序设计(验证性实验)
  8. 国产linux 中标麒麟安装.net core sdk
  9. php随机生成验证码代码
  10. iOS相册实现与AssetsLibrary框架使用