Артем ответил правильно, но, возможно, не очень ясно.По сути, вам нужно: каждый раз, когда вы приходите на новый узел, изучите весь путь, начиная с этого узла и состоящий из ссылок на ошибки, и найдите совпадения на этом пути.(Это не меняет вашу текущую позицию).В вашем примере вы изучите пути b-> b (совпадений не найдено) и c-> c (совпадение bc
найдено).
Обратите внимание, что из соображений эффективности необходимо кэшировать значение «следующего соответствия» на каждом узле.То есть, если вы исследуете путь, начинающийся в узле u
, и после нескольких шагов находите соответствующий узел v
, запомните значение next_match[u] = v
, чтобы в следующий раз, когда вам понадобилось исследовать этот путь, вы могли сделать один прыжокпрямо на v
.