给定⼀个经过编码的字符串,返回它解码后的字符串

    编码规则为k[encoded_string],表示其中⽅括号内部的encoded_string正好重复k次。 注意:k保证为正整数

    你可以认为输⼊字符串总是有效的,输⼊字符串中没有额外的空格, 且输⼊的⽅括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数k,不会出现像3a或2[4]的输⼊

    示例:

    s = “3[a]2[bc]”
    返回 “aaabcbc”

    s = “3[a2[c]]”
    返回 “accaccacc”

    s = “2[abc]3[cd]ef”
    返回 “abcabccdcdcdef”

    s = “a3[b]2[c1[d1[e]]f]10[g]x2[y]z”
    返回 “abbbcdefcdefggggggggggxyyz”

    1. public class Arithmetic2 {
    2. StringBuffer buffer=new StringBuffer();
    3. String temp="an3[b]2[c1[d1[e]]f]10[g]x2[y]z";
    4. //"abbb"
    5. char[] chars = temp.toCharArray();
    6. Stack<String> stack=new Stack<>();
    7. public void fun1(){
    8. for(int x=0;x< chars.length;x++){
    9. if(Character.isDigit(chars[x])){
    10. //数字
    11. if(stack.isEmpty()){
    12. stack.push(String.valueOf(chars[x]));
    13. }else {
    14. String peek = stack.peek();
    15. if(isNumeric(peek)){
    16. String pop = stack.pop();
    17. stack.push(pop+chars[x]);
    18. }else {
    19. stack.push(String.valueOf(chars[x]));
    20. }
    21. }
    22. }else if(chars[x] ==']'){
    23. String tempStr="";
    24. while (!stack.isEmpty()){
    25. String str = stack.pop();
    26. if(isNumeric(str)){
    27. //数字
    28. int i = Integer.parseInt(str);
    29. String temp=tempStr;
    30. for(int y=1;y<i;y++){
    31. tempStr+=temp;
    32. }
    33. }else if(!str.equals("[")) {
    34. //字母
    35. tempStr=str+tempStr;
    36. }
    37. }
    38. buffer.append(tempStr);
    39. }else {
    40. //字母
    41. if(stack.isEmpty())
    42. {
    43. buffer.append(chars[x]);
    44. }else {
    45. stack.push(String.valueOf(chars[x]));
    46. }
    47. }
    48. }
    49. System.out.println("buffer=="+buffer.toString());
    50. }
    51. public static boolean isNumeric(String str){
    52. for(int i=0;i<str.length();i++){
    53. int chr=str.charAt(i);
    54. if(chr<48 || chr>57)
    55. return false;
    56. }
    57. return true;
    58. }
    59. }