public static void Main()
bool result = AreOneEditAway(s1, s2);
Console.WriteLine($"Are \"{s1}\" and \"{s2}\" one edit or zero edits away? {result}");
result = AreOneEditAway(s1, s2);
Console.WriteLine($"Are \"{s1}\" and \"{s2}\" one edit or zero edits away? {result}");
result = AreOneEditAway(s1, s2);
Console.WriteLine($"Are \"{s1}\" and \"{s2}\" one edit or zero edits away? {result}");
result = AreOneEditAway(s1, s2);
Console.WriteLine($"Are \"{s1}\" and \"{s2}\" one edit or zero edits away? {result}");
static bool AreOneEditAway(string s1, string s2)
if (Math.Abs(s1.Length - s2.Length) > 1)
if (s1.Length == s2.Length)
return OneReplaceAway(s1, s2);
if (s1.Length + 1 == s2.Length)
return OneInsertAway(s1, s2);
if (s1.Length == s2.Length + 1)
return OneInsertAway(s2, s1);
static bool OneReplaceAway(string s1, string s2)
bool foundDifference = false;
for (int i = 0; i < s1.Length; i++)
static bool OneInsertAway(string s1, string s2)
while (index1 < s1.Length && index2 < s2.Length)
if (s1[index1] != s2[index2])