给定⼀个经过编码的字符串,返回它解码后的字符串
编码规则为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”
public class Arithmetic2 {StringBuffer buffer=new StringBuffer();String temp="an3[b]2[c1[d1[e]]f]10[g]x2[y]z";//"abbb"char[] chars = temp.toCharArray();Stack<String> stack=new Stack<>();public void fun1(){for(int x=0;x< chars.length;x++){if(Character.isDigit(chars[x])){//数字if(stack.isEmpty()){stack.push(String.valueOf(chars[x]));}else {String peek = stack.peek();if(isNumeric(peek)){String pop = stack.pop();stack.push(pop+chars[x]);}else {stack.push(String.valueOf(chars[x]));}}}else if(chars[x] ==']'){String tempStr="";while (!stack.isEmpty()){String str = stack.pop();if(isNumeric(str)){//数字int i = Integer.parseInt(str);String temp=tempStr;for(int y=1;y<i;y++){tempStr+=temp;}}else if(!str.equals("[")) {//字母tempStr=str+tempStr;}}buffer.append(tempStr);}else {//字母if(stack.isEmpty()){buffer.append(chars[x]);}else {stack.push(String.valueOf(chars[x]));}}}System.out.println("buffer=="+buffer.toString());}public static boolean isNumeric(String str){for(int i=0;i<str.length();i++){int chr=str.charAt(i);if(chr<48 || chr>57)return false;}return true;}}
