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;
}