Java中实现解码字符串的方法,实用代码
时间:2022-04-29
本文章向大家介绍Java中实现解码字符串的方法,实用代码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
需求:给定一个经过编码的字符串,要求返回它的解码后的字符串。
编码规则是:k[str],这个编码的含义是str出现了k次,k是一个正整数。
具体例子:
s = "3[a]2[bc]", return "aaabcbc".
s = "3[a2[c]]", return "accaccacc".
s = "2[abc]3[cd]ef", return "abcabccdcdcdef".
网络配图
Java中的解决方法,解决这个问题的关键是要将字符串转换为一个结构化的数据结构和递归形式来返回字符串。
实例代码如下:
class Node{
int num;
ArrayList<Node> list;
char symbol;
boolean isList;
public Node(char s){
symbol=s;
}
public Node(int n){
list = new ArrayList<Node>();
isList=true;
num=n;
}
public String toString(){
String s = "";
if(isList){
s += num + ":" + list.toString();
}else{
s += symbol;
}
return s;
}
}
public class Solution {
public String decodeString(String s) {
int i = 0;
Stack<Node> stack = new Stack<Node>();
stack.push(new Node(1));
String t = "";
while (i < s.length()) {
char c = s.charAt(i);
// new Node
if (c >= '0' && c <= '9') {
t += c;
} else if (c == '[') {
if (t.length() > 0) {
int num = Integer.parseInt(t);
stack.push(new Node(num));
t = "";
}
} else if (c == ']') {
Node top = stack.pop();
if (stack.isEmpty()) {
} else {
stack.peek().list.add(top);
}
} else {
stack.peek().list.add(new Node(c));
}
i++;
}
return getString(stack.peek());
}
public String getString(Node node){
String s="";
if(node.isList){
for(int i=0; i<node.num; i++){
for(Node t: node.list)
s+= getString(t);
}
}else{
s+=node.symbol;
}
return s;
}
}
这不是唯一的方法,如果你有更好的方法,可以分享出来,大家一起学习一下。
- Apache 性能调优-参考篇
- Apache虚拟主机-解惑篇
- Hadoop生态圈和各组件的启动、关闭脚本介绍
- CUDA入门
- 关于cuda拷贝的速度测试
- VS报错:DEBUG Assertion Failed!
- cuda&vs2010的属性配置
- CUDA中自动初始化显卡设备宏
- 如何在cuda内核函数中产生随机数(host端调用,device端产生)
- [翻译]CURAND Libaray--Host API--(2)
- [翻译]CURAND Libaray--Host API--(1)
- C/C++ 遇到0xcccccccc访问冲突
- Win7下Eclipse开发hadoop应用程序环境搭建
- Oracle修改监听IP地址
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Spark 2.2 on K8S Dynamic Resource Allocation
- Java中异常处理的9个最佳实践
- Mongodb执行计划
- Spark 2.2/2.3/2.4 的 Dynamic Resource Allocation
- 04-操作文件与目录
- 05-命令的使用
- 缓存穿透、缓存击穿、缓存雪崩看这篇就够了,文末还送福利哦!
- 百万并发「零拷贝」技术系列之经典案例Netty
- 什么是大O表示法
- 06-1重定向
- sbt 项目导入问题
- Spark 程序优化建议
- Spark persist MEMORY_AND_DISK & DISK_ONLY
- jvm类加载机制,双亲委派机制,看这一篇就够了
- 【教程】利用Windows抓取AppStore旧版本应用ID