您的位置:首页 > 其它

腾讯笔试--解压缩字符串

2020-08-23 02:18 86 查看

腾讯笔试–解压缩字符串

刚才在微博上看到一个网友贴出来一个解压缩字符串的题目,觉得很有意思,就自己写了写
大概是这样的:给一个字符串 AC[3|B[2|CA]]G
然后|前面的是反复的次数,后面是需要重复的字符串 括号代表先后顺序
我就用了一个 类似于栈的办法来处理。这里其实有点讨巧的东西在里面。因为用栈的话,你一个一个弹出还要再反序,不如倒序遍历之后用substring的办法直接截取。当然我没有测,不知道时间如何

public class Server {

/*
* 我用了一个类似于栈操作的办法来处理,首先是构造一个 worked 的string
* 接着把prepared里的字符一个一个append进去。 如果说下一个append的是“]”
* 的话,从后往前遍历worked 用while循环读到第一个是"["的index(j)
* 中间需要记录一下|的位置。 这个位置之后的substring肯定是需要重复的元素
*前面的substring是重复的次数。注意一下substring的前闭后开问题。
* 那么将worked重置,重置为worked的(0,j)加上重复构造的字符串
*
* */
public static void main(String[] args) {
String prepared = "AC[3|B[2|CA]]G";
StringBuilder worked = new StringBuilder();
for (int i = 0; i < prepared.length(); i++) {
if (prepared.charAt(i) != ']') {
worked.append(prepared.charAt(i));
} else {
String time;
String duplicate = "";
int break_time = worked.length() - 1;
int j = worked.length() - 1;
while (worked.charAt(j) != '[') {
if (worked.charAt(j) == '|') {
duplicate = worked.substring(j + 1);
break_time = j;
}
--j;
}
time = worked.substring((j + 1), break_time);
int times = Integer.parseInt(time);
StringBuilder decompress = new StringBuilder();
for (int k = 0; k < times; k++) {
decompress.append(duplicate);
}
StringBuilder temp = new StringBuilder();
worked = temp.append(worked.substring(0, j)).append(decompress);
}
}
String res = worked.toString();
System.out.println(res);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: