山东网站建设工作室,网页设计全部代码,制定一网站建设的市场定位的方案,wordpress自动本题主要思路是使用两个栈#xff1a;一个用于存储倍数#xff08;数字#xff09;#xff0c;另一个用于存储解码结果#xff08;字符串#xff09;。在遍历输入字符串时#xff0c;根据不同的字符执行相应的操作#xff0c;最终得到解码后的字符串。 具体来说#x… 本题主要思路是使用两个栈一个用于存储倍数数字另一个用于存储解码结果字符串。在遍历输入字符串时根据不同的字符执行相应的操作最终得到解码后的字符串。 具体来说字符有四种不同的情况
如果c是 [表示开始一个新的子串将当前的倍数multi压入stack_multi栈中将当前的解码结果ans压入stack_ans栈中然后重置multi为0ans为一个空字符串。 如果c是]表示当前子串结束需要将当前的ans按照倍数进行重复。从stack_multi栈中取出一个倍数cur_multi然后将ans重复cur_multi次再与stack_ans栈中的上一个解码结果相加得到新的解码结果。如果c是数字在0到9之间将当前的数字字符转换为整数并更新multi。如果c是其他字符直接将其添加到当前的解码结果res中。 Java代码如下
class Solution {public String decodeString(String s) {StringBuilder ans new StringBuilder();int mutil 0;LinkedListInteger stack_multi new LinkedList();LinkedListString stack_ans new LinkedList();for(Character c : s.toCharArray()){if(c 0 c 9){mutil mutil * 10 (c - 0);}else if(c [){stack_multi.addLast(mutil);stack_ans.addLast(ans.toString());mutil 0;ans new StringBuilder();}else if(c ]){int cur_mutil stack_multi.removeLast();StringBuilder temp new StringBuilder();for(int i0; icur_mutil; i) temp temp.append(ans);ans new StringBuilder(stack_ans.removeLast() temp);}else{ans.append(c);}}return ans.toString();}
}