时间限制:C/C++ 2秒,其他语言4秒空间限制:C/C++ 256M,其他语言512M

    小Q想要给他的朋友发送一个神秘字符串,但是他发现字符串的过于长了,于是小Q发明了一种压缩算法对字符串中重复的部分进行了压缩,对于字符串中连续的m个相同字符串S将会压缩为m|S,例如字符串ABCABCABC将会被压缩为[3|ABC],现在小Q的同学收到了小Q发送过来的字符串,你能帮助他进行解压缩么?

    输入描述:

    输入第一行包含一个字符串s,代表压缩后的字符串。

    S的长度<=1000; S仅包含大写字母、[、]、|; 解压后的字符串长度不超过100000; 压缩递归层数不超过10层;

    输出描述:

    输出一个字符串,代表解压后的字符串。

    示例1
    输入

    HG[3|B[2|CA]]F

    输出

    HGBCACABCACABCACAF

    说明

    HG[3|B[2|CA]]F−>HG[3|BCACA]F−>HGBCACABCACABCACAF

    1. import java.util.Scanner;
    2. public class Solution {
    3. public static void main(String[] args) {
    4. Scanner sc = new Scanner(System.in);
    5. String s = sc.next();
    6. sc.close();
    7. while (s.contains("[")) { // 判断是否需要解压
    8. // 最里面的第一对 [ ]
    9. int right = s.indexOf("]");
    10. int left = s.lastIndexOf("[", right); // 保证是第一对
    11. // 最内层的压缩字符串
    12. String word = s.substring(left + 1, right);
    13. // 压缩次数和字符串
    14. Integer n = Integer.valueOf(word.split("\\|")[0]);
    15. String w = word.split("\\|")[1];
    16. // 解压缩
    17. String tmp = "";
    18. for (int i = 0; i < n; i++) {
    19. tmp += w;
    20. }
    21. // 还原字符串
    22. s = s.substring(0, left) + tmp + s.substring(right + 1);
    23. }
    24. System.out.println(s);
    25. }
    26. }

    1、Java String 字符串的操作