问题描述
这是一个流行的面试问题:
给定一个编码字符串,返回它的解码字符串。
编码规则是:k[encoded_string],其中方括号内的encoded_string正好重复k次。请注意,k 保证为正整数。
Input: s = "3[a]2[bc]"
Output: "aaabcbc"
可以通过巧妙地使用堆栈来解决。
我想反过来:给定一个解码的字符串,你能找到最佳编码的字符串吗?
即
Input: s = "aaabcbc"
Output: "3[a]2[bc]"
我有一种感觉,这可能比前一种情况要困难得多,您必须跟踪每个正在运行的子字符串。
或者有什么容易的方法吗?
解决方法
您可以利用正则表达式发挥创意,并将繁重的工作委托给正则表达式引擎。
这是一个 JavaScript 示例:
const d = "aaabcbc";
const e = d.replaceAll(/(.+)\1+/g,(a,b) => `${a.length / b.length}[${b}]`);
console.log(e);