腾讯2020校园招聘-后台 第一题

题目:

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

输出例子1:
"HGBCACABCACABCACAF"
例子说明1:
HG[3|B[2|CA]]F−>HG[3|BCACA]F−>HGBCACABCACABCACAF

代码:

复制代码
 1 package com.zcy.mybatisplus.mt;/**
 2  * @author chenyang zhang
 3  * @date 2021/4/8 - 11:51
 4  */
 5 
 6 /**
 7  * @author zcy
 8  * @date 2021年04月08日 11:51
 9  */
10 public class Solution {
11     static StringBuilder sb;
12 
13     public String compress(String str) {
14         // write code here
15         //[2|b]最少5个字符
16         if (str.length() <= 4) {
17             return str;
18         }
19 
20         sb = new StringBuilder(str);
21         int right = 0;
22         int left = 0;
23         //lefr和right用来记录最内侧的[]下标,也就是最先解压的一个压缩
24         while ((right = sb.indexOf("]")) > 0) {
25             left = sb.substring(0, right).lastIndexOf('[');
26 
27             String res = solution(sb.substring(left + 1, right));  //不传入[]这两个符号
28 
29             sb.replace(left, right + 1, res);
30         }
31         return sb.toString();
32     }
33 
34     //对每一个 44|ADC 进行操作
35     public static String solution(String s) {
36         String[] str = s.split("\\|");
37         int num = Integer.parseInt(str[0]);
38         StringBuilder sb = new StringBuilder();
39         while (num-- > 0) {
40             sb.append(str[1]);
41         }
42         return sb.toString();
43     }
44 }
复制代码

 

posted @   堤苏白  阅读(122)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示