欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  互联网

腾讯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