腾讯笔试--解压缩字符串
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); } }
相关文章推荐
- 腾讯在线笔试题-把字符串“I am from china.”反转成为“I am from china.”,以及把整个字符串逆序。
- 腾讯笔试题 构造回文字符串
- 输入一个字符串,输出该字符串中字符的所有组合。(腾讯2014笔试附加题)
- 字符串编码(腾讯笔试)
- 经典算法题:字符串非空子串(腾讯笔试题)
- 指针与字符串操作-一道腾讯笔试题
- JAVA动态规划(三)--最长回文字符串(可删除中间字符)【腾讯2016实习生笔试题】
- [2016腾讯暑期实习在线笔试题]最长回文字符串
- 腾讯2018暑期实习生招聘在线笔试之字符串操作
- 2016年腾讯笔试题之回文字符串
- 笔试题-压缩与解压缩字符串
- 腾讯笔试题 构造回文字符串。
- 数据结构基础(11)------------输出字符串的所有组合( Permutation)--腾讯笔试附加题
- [腾讯笔试]求一个字符串删除若干字符可构成一个回文串
- 字符串非空子串(腾讯笔试题)
- 腾讯笔试题:输入16的倍数个字符串,按格式排版输出
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 可删除某些字符的最长回文字符串(2016腾讯在线笔试题)
- 腾讯2017暑假实习笔试题-字符串编码
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长