LeetCode-Decode String

204 阅读1分钟

题目描述

思路

使用栈的思想对字符进行处理

主要难点在于处理重复中括弧中的字母的次数,做法就在于将取出的字符,按照后面的数字的次数重新入栈几次,就可以达到重复括弧内的字母的目的。

代码实现

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();
        
    }
}