Given an encoded string, return it's decoded string.

The encoding rule is: k[encoded_string], where the encoded_string inside the square brackets is being repeated exactly k times. Note that k is guaranteed to be a positive integer.

You may assume that the input string is always valid; No extra white spaces, square brackets are well-formed, etc.

Furthermore, you may assume that the original data does not contain any digits and that digits are only for those repeat numbers, k. For example, there won't be input like 3a or 2[4].

Examples:

s = "3[a]2[bc]", return "aaabcbc".
s = "3[a2[c]]", return "accaccacc".
s = "2[abc]3[cd]ef", return "abcabccdcdcdef".
Solution:
public class Solution {
public String decodeString(String s) {
StringBuilder builder = new StringBuilder();
decodeStringRecur(s.toCharArray(),builder,0);
return builder.toString();
} public int decodeStringRecur(char[] sArr, StringBuilder builder, int start){
if (start>=sArr.length){
return start;
} int p1 = start;
while (p1<sArr.length && sArr[p1]!=']'){
if (sArr[p1]<'0' || sArr[p1]>'9'){
builder.append(sArr[p1++]);
} else {
// get the following encoded string.
// get the number first.
int val = 0;
while (p1<sArr.length && sArr[p1]!='['){
val = val*10 + (int)(sArr[p1++]-'0');
} // get the string.
StringBuilder subBuilder = new StringBuilder();
p1 = decodeStringRecur(sArr,subBuilder,p1+1); // add into decoded string.
for (int i=0;i<val;i++){
builder.append(subBuilder);
}
}
} return (p1<sArr.length) ? p1+1 : p1;
}
}
 
 

最新文章

  1. 一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表
  2. 关于.NET参数传递方式的思考
  3. 8.2 使用Fluent API进行实体映射【Code-First系列】
  4. About MTU,TCP-MSS (转)
  5. Asp.Net使用代理IP远程获取数据
  6. javascript异步延时载入及推断是否已载入js/css文件
  7. UINavigationController 与 UITabBarController
  8. 【算法Everyday】第三日 KMP算法
  9. linux配置备忘
  10. 初识PHP遗留下来的问题?
  11. 【BZOJ1030】文本生成器(AC自动机,动态规划)
  12. 利用dladdr来获得so自身的路径
  13. 基数计数——HyperLogLog
  14. mongodb数据库安装及常见操作
  15. android开发 静态碎片布局实现
  16. flask的session用法
  17. 自己写的 读写 ini 配置文件类
  18. BZOJ3270:博物馆(高斯消元)
  19. electron 的中文文档的地址 以及 窗口改变的步骤
  20. [转]How to Leak a Context: Handlers &amp; Inner Classes

热门文章

  1. paas架构之docker——安装
  2. IO流02--毕向东JAVA基础教程视频学习笔记
  3. 《SQL Server企业级平台管理实践》读书笔记——关于SQL Server数据库的还原方式
  4. cxf开发Restful Web Services
  5. JAVA基础知识点:内存、比较和Final
  6. hibernate基本类型映射
  7. PHP实战-文章发布系统学习记录
  8. try catch finally 用法
  9. python 小程序练习
  10. 形如(function(){}).call()的js语句