使用棧的思想對字符進行處理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();
}
}
複製代碼