假设您有一个函数matchWithMagic
,它返回给定字符串的布尔值。你不知道它是如何做到的,但你知道true
的结果意味着“匹配”。假设此函数的复杂性在时间和空间上与输入字符串的大小是线性的。
现在的问题是实现一个函数,对于给定的字符串,它将返回一对整数,即pos
和len
,使matchWithMagic(substring(inputstring,pos,len))
匹配并pos
这是真实的最小数字(最早的匹配)。知道pos
时,len
是匹配的最小数字(最短匹配,优先级较低)。对效率没有要求,但答案应包括绩效分析。
例如,假设magic函数返回true,输入字符串包含“Good Guy!”或者“坏人!”你的函数应该返回pos=5,len=8
为“好坏人!”。
首选语言是C / C ++ / Java / JavaScript / C#/ Basic,但其他语言都可以。
更新
现已发布一个微不足道的答案。我希望能够出现更有效的解决方案。
答案 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)
(假设matchWithMagic
为O(n)
)。