栈系列一>字符串解码
目录
- 题目:
- 解析:
- 代码:
题目:
链接: link
解析:
代码:
class Solution {public String decodeString(String _s) {char[] s = _s.toCharArray();int n = s.length;int i = 0;Stack<Integer> nums = new Stack<>();Stack<StringBuffer> st = new Stack<>();//先放一个空串进去,防止越界访问st.push(new StringBuffer());while(i < n){if(s[i] >= '0' && s[i] <= '9'){int tmp = 0;while(i < n && Character.isDigit(s[i])){tmp = tmp * 10 + (s[i]-'0');i++;}nums.push(tmp);}else if(s[i] == '['){//把'['后面的字符串提取出来,放入sti++;StringBuffer tmp = new StringBuffer();while(i < n && s[i] >= 'a' && s[i] <= 'z'){tmp.append(s[i]);i++;}st.push(tmp);}else if(s[i] == ']'){//解析int k = nums.pop();StringBuffer tmp = st.pop();while(k > 0){st.peek().append(tmp);k--;}i++;}else{//单独遇到字符串,提取字符放入st栈顶字符串后面StringBuffer tmp = new StringBuffer();while(i < n && s[i] >= 'a' && s[i] <= 'z'){tmp.append(s[i]);i++;}st.peek().append(tmp);}}return st.peek().toString();}
}