腾讯2020校招试题一——压缩算法

腾讯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);
	}
}

你可能感兴趣的:(腾讯2020校招试题一——压缩算法)