腾讯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 }
· 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应用必不可少的技术