【发布时间】:2020-08-10 08:50:02
【问题描述】:
我需要为String 分解创建一个算法。
一些例子:
-
ABCABCDEDEDEF-->ABC*2+DE*3+F -
ABCcABCczcz-->ABC*2+cz*2+c -
test-->test
字符串的每个部分都应该用+ 分隔,如果重复,后面跟着* 加上它连续出现的次数。
这是我尝试过的:
private static int[] prefixFunction(String source) {
int n = source.length();
int[] pi = new int[n];
for (int i = 1; i < n; i++) {
int j = pi[i - 1];
while (j > 0 && source.charAt(i) != source.charAt(j))
j = pi[j - 1];
if (source.charAt(i) == source.charAt(j))
j++;
pi[i] = j;
}
return pi;
}
【问题讨论】:
-
嵌套好吗?即(ABC * 2 + DEF)* 3
-
我认为不,因为在这个问题中,我需要在不带任何括号的字符串上仅使用
+和*操作来构建最经济的输入字符串表示。 -
“占用最少空间”是什么意思?字符串是否总是像
DE、ABC等这样连续?一些额外的例子会很好。 -
@Daniel “占用最少空间” = 最佳解决方案。另外,添加其他示例。
-
@SlandShow - 我觉得还是有问题,你知道
ABCcABCczcz有11个字符而ABC*2+cz*2+c有12个字符,这与test基本相同,修改为不值得。