def decode_string(s):
stack=[]; cs=''; cn=0
for c in s:
if c.isdigit(): cn=cn*10+int(c)
elif c=='[': stack.append((cs,cn)); cs=''; cn=0
elif c==']': ps,pn=stack.pop(); cs=ps+pn*cs
else: cs+=c
return cs
public String decodeString(String s){
Stack<Integer> ns=new Stack<>(); Stack<String> ss=new Stack<>();
String cs=""; int cn=0;
for(char c:s.toCharArray()){
if(Character.isDigit(c)) cn=cn*10+(c-'0');
else if(c=='['){ss.push(cs);ns.push(cn);cs="";cn=0;}
else if(c==']'){int n=ns.pop();String p=ss.pop();cs=p+cs.repeat(n);}
else cs+=c;
} return cs;
}
Python tuple stack. n*string vs String.repeat().
def decode_string(s):
stack=[]; cs=''; cn=0
for c in s:
if c.isdigit(): cn=cn*10+int(c)
elif c=='[': stack.append((cs,cn)); cs=''; cn=0
elif c==']': ps,pn=stack.pop(); cs=ps+pn*cs
else: cs+=c
return cs
public String decodeString(String s){
Stack<Integer> ns=new Stack<>(); Stack<String> ss=new Stack<>();
String cs=""; int cn=0;
for(char c:s.toCharArray()){
if(Character.isDigit(c)) cn=cn*10+(c-'0');
else if(c=='['){ss.push(cs);ns.push(cn);cs="";cn=0;}
else if(c==']'){int n=ns.pop();String p=ss.pop();cs=p+cs.repeat(n);}
else cs+=c;
} return cs;
}
1. [ save state 2. ] pop and repeat