Given two strings S and T, determine if they are both one edit distance apart.
Understand the problem:
Note that the problem asks for EXACTLY one edit distance. There are several cases to consider:
-- If the len1 - len2 > 1, return false;
-- We compare each character of the two strings. if not equal.
-- If len1 > len2, we move i++, which means delete one character from string1, e.g. abc, ac
-- If len1 < len2, we move j++, which add one character for string1 (or delete one from string 2).
-- If len1 == len2, i++, j++
Code (Java):
public class Solution { public boolean isOneEditDistance(String s, String t) { if ((s == null || s.length() == 0) && (t == null || t.length() == 0)) { return false; } if (s == null || s.length() == 0) { return t.length() == 1; } if (t == null || t.length() == 0) { return s.length() == 1; } if (Math.abs(s.length() - t.length()) > 1) { return false; } int count = 0; int i = 0; int j = 0; while (i < s.length() && j < t.length()) { if (s.charAt(i) != t.charAt(j)) { count++; if (count > 1) { return false; } if (s.length() > t.length()) { i++; } else if (s.length() < t.length()) { j++; } else { i++; j++; } } else { i++; j++; } } if (i < s.length() || j < t.length()) { count++; } return count == 1; } }
Summary:
The problem itself is not hard, but very tricky to get the OJ passed. Some tricks need to be very very careful:
1. If the length of the two words diff more than 1, directly return false;
2. At the end, we need to check if i < s.length() OR j < t.length(). That is because the problem asks for EXACTLY ONE edit distance. e.g. s = abc, t = ab, in this case. the count = 0. So we need to accumulate the count by 1 in that case. If the problem asks for edit distance which is LESS or EQUAL to 1, then we don't need to check that step.
No comments:
Post a Comment