编码面试问题的有趣反转

问题描述

这是一个流行的面试问题:

给定一个编码字符串,返回它的解码字符串。

编码规则是: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);