1) Существует множество алгоритмов, связанных с поиском строк.Одним из них является знаменитый алгоритм Кнута-Морриса-Пратта .
2) Вы также можете проверить регулярные выражения ("Regex") на любом языке, который вы используете.Они наверняка помогут вам найти подстроки, «похожие» на исходные.
то есть [Java]
String pat = "Home";
String source = "IgotanewHwme";
for(int i = 0; i < pat.length(); i++){
//split around i .. not including char i itself .. instead, replace it with [a-zA-Z] and match using this new pattern.
String new_pat = "("+pat.substring(0, i)+")"+ "[a-zA-Z]" + "("+pat.substring(i+1, pat.length())+")";
System.out.println(new_pat);
System.out.println(source.matches("[a-zA-Z]*"+new_pat+"[a-zA-Z]*"));
}
, и я думаю, что легко заставить его принимать любое количество ошибок.