Hone logo
Hone
Problems

One Edit Distance

Given two strings, determine if they are exactly one edit (or zero edits) away from each other. An edit can be an insertion, deletion, or replacement of a single character. This problem is fundamental in areas like spell checking, diff utilities, and string similarity algorithms.

Problem Description

You are tasked with implementing a function that takes two strings, s1 and s2, as input and returns true if they are at most one edit distance apart, and false otherwise.

Key Requirements:

  • One Insertion: s2 can be obtained from s1 by inserting exactly one character.
  • One Deletion: s2 can be obtained from s1 by deleting exactly one character.
  • One Replacement: s2 can be obtained from s1 by replacing exactly one character.
  • Zero Edits: If the strings are identical, they are also considered to be one edit distance apart (zero edits).

Expected Behavior:

The function should return true if the strings satisfy any of the above conditions, and false otherwise.

Important Edge Cases:

  • Empty Strings: Consider how the logic handles empty input strings.
  • Identical Strings: The function should correctly identify identical strings as being zero edits apart.
  • Length Difference: Strings with a length difference greater than 1 cannot be one edit distance apart.

Examples

Example 1:

Input: s1 = "pale", s2 = "ple"
Output: true
Explanation: 'a' can be deleted from "pale" to get "ple".

Example 2:

Input: s1 = "pales", s2 = "pale"
Output: true
Explanation: 's' can be deleted from "pales" to get "pale".

Example 3:

Input: s1 = "pale", s2 = "bale"
Output: true
Explanation: 'p' can be replaced with 'b' in "pale" to get "bale".

Example 4:

Input: s1 = "pale", s2 = "bake"
Output: false
Explanation: "pale" and "bake" differ by two replacements ('p' -> 'b', 'l' -> 'k').

Example 5:

Input: s1 = "a", s2 = ""
Output: true
Explanation: 'a' can be deleted from "a" to get "".

Example 6:

Input: s1 = "", s2 = "a"
Output: true
Explanation: 'a' can be inserted into "" to get "a".

Example 7:

Input: s1 = "abc", s2 = "abc"
Output: true
Explanation: The strings are identical (zero edits).

Constraints

  • The lengths of s1 and s2 will be between 0 and 1000, inclusive.
  • s1 and s2 will only contain lowercase English letters.
  • Your solution should aim for an efficient time complexity, ideally O(min(N, M)), where N and M are the lengths of the strings.

Notes

  • Think about how the lengths of the two strings relate to the possible edit operations.
  • Consider a case-by-case analysis based on the length difference between the two strings.
  • When comparing strings of equal length, you are essentially looking for a single character replacement.
  • When comparing strings with a length difference of one, you are looking for a single insertion or deletion.
  • Pseudocode for comparison can be structured by first checking the length difference. If the difference is greater than 1, return false. Then, handle the cases for equal lengths and length difference of 1 separately.
Loading editor...
plaintext