前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中实现解码字符串的方法,实用代码

Java中实现解码字符串的方法,实用代码

作者头像
用户1289394
发布2018-02-27 15:33:55
9080
发布2018-02-27 15:33:55
举报
文章被收录于专栏:Java学习网

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

编码规则是:k[str],这个编码的含义是str出现了k次,k是一个正整数。

具体例子:

代码语言:js
复制
s = "3[a]2[bc]", return "aaabcbc".
s = "3[a2[c]]", return "accaccacc".
s = "2[abc]3[cd]ef", return "abcabccdcdcdef".

网络配图

Java中的解决方法,解决这个问题的关键是要将字符串转换为一个结构化的数据结构和递归形式来返回字符串。

实例代码如下:

代码语言:js
复制
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;
}
}

这不是唯一的方法,如果你有更好的方法,可以分享出来,大家一起学习一下。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档