Совпадение подстроки в строке с допустимым отклонением в 1 символ

Я проходил через несколько вопросов об интервью Amazon на CareerCup.com и натолкнулся на этот интересный вопрос, который я так и не смог понять, как это сделать. Я думал об этом с 2-х дней. Либо я отказываюсь от подхода, либо это действительно сложная функция для написания.

Вопрос в следующем:

Напишите функцию в C, которая может найти, является ли строка подстрокой другой. Обратите внимание, что несоответствие одного символа должно игнорироваться.

A mismatch can be an extra character: ’dog’ matches ‘xxxdoogyyyy’  
A mismatch can be a missing character: ’dog’ matches ‘xxxdgyyyy’ 
A mismatch can be a different character: ’dog’ matches ‘xxxdigyyyy’

Возвращаемое значение не упоминалось в вопросе, поэтому я предполагаю, что сигнатура функции может выглядеть примерно так:

char * MatchWithTolerance(const char * str, const char * substr);

Если есть совпадение с данными правилами, верните указатель на начало совпавшей подстроки в строке. Остальное вернуть ноль.

бонус

Если кто-то также может найти общий способ сделать допуск к n вместо 1, то это было бы просто замечательно. В этом случае подпись будет:

char * MatchWithTolerance(const char * str, const char * substr, unsigned int tolerance = 1);

Спасибо всем, кто попытается это сделать и поделится своим успешным решением.

Ответы на вопрос(5)

Ваш ответ на вопрос