首页 > 编程语言 >leetcode 394.字符串解码 Java

leetcode 394.字符串解码 Java

时间:2023-04-02 18:13:23浏览次数:40  
标签:Java 示例 StringBuilder leetcode 394 字符串 sb stack 输入

394.字符串解码

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a2[4] 的输入。

示例 1:

输入:s = "3[a]2[bc]"
输出:"aaabcbc"

示例 2:

输入:s = "3[a2[c]]"
输出:"accaccacc"

示例 3:

输入:s = "2[abc]3[cd]ef"
输出:"abcabccdcdcdef"

示例 4:

输入:s = "abc3[cd]xyz"
输出:"abccdcdcdxyz"

提示:

  • 1 <= s.length <= 30
  • s 由小写英文字母、数字和方括号 '[]' 组成
  • s 保证是一个 有效 的输入。
  • s 中所有整数的取值范围为 [1, 300]
public String decodeString(String s){
  Deque<Character> stack = new ArrayDeque<>();
  for(char c :s.toCharArray()){
    if(c != ']'){
      stack.push(c);   //把除了']'的所有都押入到栈中
    }else{
      StringBuilder sb = new StringBuilder();
      while(!stack.isEmpty()&& Character.isLetter(stack.peek())){
        sb.insert(0,stack.pop());
      }
      String sub = sb.toString(); // 获得 [] 内的字符串
      stack.pop(); // 去除 [ 括号
      
      // step2 :获取倍数数字
      sb = new StringBuilder();
 			while(!stack.isEmpty() && Character.isDigit(stack.peek())){
        sb.insert(0,stack.pop());
      }     
      int count = Integer.valueOf(sb.toString()); // 倍数
      
      while(count > 0){
        for(char ch:sub.toCharArray){
          stack.push(ch);
        }
      	count--;
      }
    }
  }
  // 把栈里面所有的字母取出来
  StringBuilder retv = new StringBuilder();
  while(!stack.isEmpty()){
    retv.insert(0,stack.pop());
  }
  return retv.toString();
}

标签:Java,示例,StringBuilder,leetcode,394,字符串,sb,stack,输入
From: https://www.cnblogs.com/metatreasure/p/17280917.html

相关文章

  • Java SPI机制简介
    在JDBC4.0版本之前,使用DriverManager获取Connection对象之前都需要通过代码显式地加载驱动实现类,例如:JDBC4.0之后的版本对此做了改进,我们不再需要显式地加载驱动实现类。这得益于Java中的SPI机制,本节我们就来简单地了解SPI机制。SPI(ServiceProviderInterface)是JDK内置的一......
  • java数组的创建和使用
    声明数组必须先声明后使用,数组的声明有两种方法:1.C语言风格声明:dataTypearrayRefVar[];2.Java风格声明:dataType[]arrayRefVar;一般推荐使用第二种Java风格的声明方式。创建数组声明的数组并不具备物理空间,需要使用new操作符来创建数组,为其分配内存空间:dataType[......
  • mybatis OGNL表达式,xml查询中使用java的变量值
    1、参考struts2ongl访问静态变量与访问枚举Ognl表达式基本原理和使用方法2、java类packageorg.jeecg.mgt.cms.constant;publicclassEAd{publicstaticfinalIntegershow1=1;publicstaticfinalclassAA{publicstaticfinalIntegershow2......
  • leetcode 739.每日的温度 Java
    739.每日的温度给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。示例1:输入:temperatures=[73,74,75,71,69,72,76,73]输出:[1,1,4,2,1,......
  • nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http
    一、问题背景利用springboot上传大文件二、报错截图如下2023-04-0216:04:18,681ERROR[http-nio-63050-exec-6][GlobalExceptionHandler.java:58]-系统异常:Maximumuploadsizeexceeded;nestedexceptionisjava.lang.IllegalStateException:org.apache.tomcat.util.h......
  • java——spring boot集成kafka——kafka线上问题优化——如何解决消息积压问题
          ......
  • leetcode 20. 有效的括号 Java
    给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例1:输入:s="()"输出:true示例2:输入:s="()[]{}"输出:true......
  • java——spring boot集成kafka——kafka线上问题优化——如何做到顺序消费
          ......
  • Leetcode(剑指offer专项训练)——DP专项(6)
    排序的数目题目给定一个由不同 正整数组成的数组nums,和一个目标整数target。请从nums中找出并返回总和为target的元素组合的个数。数组中的数字可以在一次排列中出现任意次,但是顺序不同的序列被视作不同的组合。题目数据保证答案符合32位整数范围。链接无效DFS......
  • Leetcode(剑指offer专项训练)——DP专项(5)
    最少的硬币数目给定不同面额的硬币coins和一个总金额amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。链接完全背包问题思路:主要是要自己推出动态转移方程\[F(i)=mi......