0
点赞
收藏
分享

微信扫一扫

力扣394. 字符串解码

流沙雨帘 2022-04-03 阅读 72
java
class Solution {
int index;
public String decodeString(String s) {
index=0;
// StringBuilder res=new StringBuilder();
LinkedList<String> stk = new LinkedList<String>();
while(index<s.length()){
char cur=s.charAt(index);
if(Character.isDigit(cur)){// 获取一个数字并进栈
String digits=getDigits(s);
stk.addLast(digits);
}else if(Character.isLetter(cur) || cur=='['){ // 获取一个字母并进栈
stk.addLast(String.valueOf(s.charAt(index++)));
}else{//出栈
++index;
LinkedList<String> sub = new LinkedList<String>();
while(!"[".equals(stk.peekLast())){
sub.addLast(stk.removeLast());
}
stk.removeLast();// 左括号出栈
Collections.reverse(sub);//由于栈先进后出,使得顺序颠倒,因此反转一下
int repTime=Integer.valueOf(stk.removeLast()); // 此时栈顶为当前 sub 对应的字符串应该出现的次数
StringBuilder t=new StringBuilder
();
String o=getString(sub);
while(repTime-->0){// 构造字符串
t.append(o);
}
stk.addLast(t.toString());// 将构造好的字符串入栈
}
}
return getString(stk);
}
public String getString(LinkedList<String> sub){//将链表转为字符串
StringBuilder sb=new StringBuilder();
for(String s:sub){
sb.append(s);
}
return sb.toString();
}
public String getDigits(String s){//获得数字,数字可能好几位
StringBuilder digits=new StringBuilder();
while(Character.isDigit(s.charAt(index))){
digits.append(s.charAt(index++));
}
return digits.toString();
}
}

 

力扣题目:394. 字符串解码

举报

相关推荐

0 条评论