最早的最短匹配位置

时间:2013-02-15 06:12:27

标签: algorithm

假设您有一个函数matchWithMagic,它返回给定字符串的布尔值。你不知道它是如何做到的,但你知道true的结果意味着“匹配”。假设此函数的复杂性在时间和空间上与输入字符串的大小是线性的。

现在的问题是实现一个函数,对于给定的字符串,它将返回一对整数,即poslen,使matchWithMagic(substring(inputstring,pos,len))匹配并pos这是真实的最小数字(最早的匹配)。知道pos时,len是匹配的最小数字(最短匹配,优先级较低)。对效率没有要求,但答案应包括绩效分析。

例如,假设magic函数返回true,输入字符串包含“Good Guy!”或者“坏人!”你的函数应该返回pos=5,len=8为“好坏人!”。

首选语言是C / C ++ / Java / JavaScript / C#/ Basic,但其他语言都可以。

更新

现已发布一个微不足道的答案。我希望能够出现更有效的解决方案。

1 个答案:

答案 0 :(得分:1)

鉴于该功能是黑盒子,我不确定你能做得比这更好:

for (int pos = 0:n)
for (int len = 0:(n-pos))
  if (matchWithMagic(substring(inputstring,pos,len)))
    return {pos, len};
return null;

我相信O(n^3)(假设matchWithMagicO(n))。