Предполагается, что у вас есть функция matchWithMagic
, которая возвращает логическое значение для данной строки. Вы не знаете, как это сделать, но вы знаете, что результат true
означает «Матч». Предполагая, что сложность этой функции является линейной по времени и пространству по размеру входной строки.Самое раннее короткое замыкание по команде
Теперь вопрос заключается в реализации функции, которая для заданной строки, которая будет возвращать пару целых чисел, а именно pos
и len
таким образом, что matchWithMagic(substring(inputstring,pos,len))
матчи и pos
наименьшее число, что это может быть правдой (ранний матч). Когда pos
известно, len
- наименьшее число для матча (кратчайшее совпадение с более низким приоритетом). Требования к эффективности отсутствуют, но ответ должен включать анализ эффективности.
Например, предположим, что функция magic возвращает true для входных строк, содержащих «Good Guy!». или «Плохой парень!» ваша функция должна вернуть pos=5,len=8
за «Good Bad Guy!».
Предпочтительные языки: C/C++/Java/JavaScript/C#/Basic, но на других языках все в порядке.
UPDATE
Тривиальным ответ теперь отвечал. Я надеюсь, что появится более эффективное решение.
На самом деле я должен сказать, что это правильный ответ; однако цель этого сообщения не для тривиального решения. Я действительно хочу видеть, существуют ли более эффективные решения (более эффективные) или нет. В любом случае, если в течение недели не появится лучший ответ, я должен отметить это. –
Прошу прощения за то, что я понял, что это не очень хороший вопрос. Если в черном ящике нет предположений, я считаю, что это лучший ответ, который мы можем иметь. –