使用栈的思想对字符进行处理java
主要难点在于处理重复中括弧中的字母的次数,作法就在于将取出的字符,按照后面的数字的次数从新入栈几回,就能够达到重复括弧内的字母的目的。git
class Solution {
public String decodeString(String s) {
Stack<Character> stack = new Stack();
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) != ']'){
stack.push(s.charAt(i));
}else{
// 取出字符
StringBuilder sb = new StringBuilder();
while(!stack.isEmpty() && Character.isLetter((char)stack.peek()))
sb.insert(0, (char)stack.pop());
// 将‘[’出栈出掉
stack.pop();
// 取出数字
StringBuilder sbn = new StringBuilder();
while(!stack.isEmpty() && Character.isDigit((char)stack.peek()))
sbn.insert(0, (char)stack.pop());
int count = Integer.valueOf(sbn.toString());
// 将取出的字母根据数字的次数从新入栈sbn次
while(count != 0){
for(char a: sb.toString().toCharArray())
stack.push(a);
count--;
}
}
}
StringBuilder result = new StringBuilder();
while(!stack.isEmpty()){
result.insert(0, stack.pop());
}
return result.toString();
}
}
复制代码