本文主要是介绍Leetcode-394 字符串解码(不会,复习),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
此题不会!!!!!!!!!!!!
题解思路:元组思想:数字[字符串],每次遇到中括号意味着要重复数字次字符串,将数字与字符串进行压栈操作,直到遇到右中括号,开始出栈,出栈到遇到第一个左中括号前一个元素为止。
class Solution {int ptr;public String decodeString(String s) {LinkedList<String> stk = new LinkedList<String>();ptr = 0;while (ptr < s.length()) {char cur = s.charAt(ptr);if (Character.isDigit(cur)) {// 获取一个数字并进栈String digits = getDigits(s);stk.addLast(digits);} else if (Character.isLetter(cur) || cur == '[') {// 获取一个字母并进栈stk.addLast(String.valueOf(s.charAt(ptr++))); } else {++ptr;LinkedList<String> sub = new LinkedList<String>();while (!"[".equals(stk.peekLast())) {sub.addLast(stk.removeLast());}Collections.reverse(sub);// 左括号出栈stk.removeLast();// 此时栈顶为当前 sub 对应的字符串应该出现的次数int repTime = Integer.parseInt(stk.removeLast());StringBuffer t = new StringBuffer();String o = getString(sub);// 构造字符串while (repTime-- > 0) {t.append(o);}// 将构造好的字符串入栈stk.addLast(t.toString());}}return getString(stk);}public String getDigits(String s) {StringBuffer ret = new StringBuffer();while (Character.isDigit(s.charAt(ptr))) {ret.append(s.charAt(ptr++));}return ret.toString();}public String getString(LinkedList<String> v) {StringBuffer ret = new StringBuffer();for (String s : v) {ret.append(s);}return ret.toString();}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/decode-string/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
这篇关于Leetcode-394 字符串解码(不会,复习)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!