腾讯2020校招面试题(压缩算法实现)
程序员文章站
2022-03-07 21:38:37
腾讯2020校招试题一——压缩算法题目来自牛客网,感谢!现有对仅含大写字母字符串的压缩算法:字符串中连续m个相同字符子串S将会压缩为[m|S]。试设计解压缩算法。输入格式第一行输入待解压的字符串,仅由大写字母、[、|、]组成输出格式第一行输出解压后的字符串输入范例HG[3|B[2|CA]]F输出范例HGBCACABCACABCACAF压缩行为是可以嵌套的,因此不能直接顺序解压。注意到[与]的成对关系,可令指针从字符串开头向后寻找第一个],再从该位置向前寻找第一个[,...
腾讯2020校招试题一——压缩算法
题目来自牛客网,感谢!
现有对仅含大写字母字符串的压缩算法:字符串中连续m个相同字符子串S将会压缩为[m|S]。试设计解压缩算法。
输入格式
第一行输入待解压的字符串,仅由大写字母、
[
、|
、]
组成
输出格式
第一行输出解压后的字符串
输入范例
HG[3|B[2|CA]]F
输出范例
HGBCACABCACABCACAF
压缩行为是可以嵌套的,因此不能直接顺序解压。注意到[
与]
的成对关系,可令指针从字符串开头向后寻找第一个]
,再从该位置向前寻找第一个[
,即可取得配对的[
与]
。
实现中使用了String类的静态方法join和动态方法replace,与Collections类的静态方法nCopies。
我的代码实现
import java.util.Collections; import java.util.Scanner; public class Compress { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); sc.close(); while (s.contains("]")) { int right = s.indexOf("]"); int left = s.lastIndexOf("[", right); String str = s.substring(left + 1, right); String[] p = str.split("\\|"); s = s.replace("[" + str + "]", String.join("", Collections.nCopies(Integer.parseInt(p[0]), p[1]))); } System.out.println(s); } }
本文地址:https://blog.csdn.net/Uranum/article/details/107892727
上一篇: *.HTC 文件的简单介绍
下一篇: 巧用net命令解决XP中打印连接数问题