Честно говоря не страшный вопрос. Я думаю, что большинство из нас пытались создать подобное решение, когда пытались создать алгоритм поиска строк, прежде чем открывать KMP. Ответ в том, что этот жадный алгоритм не работает - он никогда не возвращается в i
. Вы можете подумать «ага! это начало иглы! » и двигайтесь вперед, пока не обнаружите «э-э-э! это не вся игла! » В этом алгоритме мы продвигаемся только вперед, продолжая искать начало стрелки. Однако начало настоящей иглы, возможно, было тем, что, по вашему мнению, было средним символом при попытке жадно сопоставить как можно большую часть иглы.
Например, aab
и aaab
. Только в третьем a
вы понимаете: «э-э-э, это не стрелка в конце концов», и после этого начинается тщательный алгоритм O (nm) со второй позиции, но ваш алгоритм просто движется вперед, и никогда не понимает aab
, который начинается на второй позиции. KMP решает эту проблему, отмечая, какие части иглы в середине также могут быть потенциальными отправными точками для иглы.