classSolution{public:stringdecodeString(strings){stack<pair<string,int>>stack;// (prevStr, repeatCount)stringcurrStr;intcurrNum=0;for(constcharc:s)if(isdigit(c)){currNum=currNum*10+(c-'0');}else{if(c=='['){stack.emplace(currStr,currNum);currStr="";currNum=0;}elseif(c==']'){constauto[prevStr,n]=stack.top();stack.pop();currStr=prevStr+getRepeatedStr(currStr,n);}else{currStr+=c;}}returncurrStr;}private:// S * n timesstringgetRepeatedStr(conststring&s,intn){stringrepeat;while(n--)repeat+=s;returnrepeat;}};
classSolution{publicStringdecodeString(Strings){Stack<Pair<StringBuilder,Integer>>stack=newStack<>();// (prevStr, repeatCount)StringBuildercurrStr=newStringBuilder();intcurrNum=0;for(finalcharc:s.toCharArray())if(Character.isDigit(c)){currNum=currNum*10+(c-'0');}else{if(c=='['){stack.push(newPair<>(currStr,currNum));currStr=newStringBuilder();currNum=0;}elseif(c==']'){finalPair<StringBuilder,Integer>pair=stack.pop();finalStringBuilderprevStr=pair.getKey();finalintn=pair.getValue();currStr=prevStr.append(getRepeatedStr(currStr,n));}else{currStr.append(c);}}returncurrStr.toString();}// S * n timesprivateStringBuildergetRepeatedStr(StringBuilders,intn){StringBuildersb=newStringBuilder();while(n-->0)sb.append(s);returnsb;}}