Given two strings S and T, determine if they are both one edit distance apart.
思路:
兩個字符串是否只通過一步變換(替換、刪除、增加)就變成相同字符串。
如果字符串長度差大于1,肯定是不可能。
如果兩個字符串本來就相同,也不可能。
可能的情況只存在于字符串長度相同但字符串不相同或長度差為1。
因為只有一個不同的字符,可以從頭開始遍歷找那第一個不相同的字符串,遍歷終止條件是兩字符串長度的最小值。
當找到第一個不同字符時,如果兩個字符串長度相同,那么如果兩個字符串剩余子串相同或者當前不同的位置是最后一個字符,則滿足題意。
如果兩個字符串長度不同,那么比較較長字符串余下子串,和較短字符串從當前位置開始的子串是否相同。
public boolean isOneEditDistance(String s, String t) {
if (s == null || t == null || Math.abs(s.length() - t.length()) > 1) {
return false;
}
if (s.equals(t)) {
return false;
}
int minLen = Math.min(s.length(), t.length());
for (int i = 0; i < minLen; i++) {
if (s.charAt(i) != t.charAt(i)) {
if (s.length() == t.length()) {
return (i == minLen - 1) || s.substring(i+1).equals(t.substring(i+1));
} else {
if (s.length() > t.length()) {
return s.substring(i+1).equals(t.substring(i));
} else {
return t.substring(i+1).equals(s.substring(i));
}
}
}
}
return true;
}