三种情况:
class Solution {
public boolean isOneEditDistance(String s, String t) {
// Make sure s is shorter than t.
if (s.length() > t.length()) {
return isOneEditDistance(t, s);
}
// return false if more than one edit
if (t.length() - s.length() > 1) {
return false;
}
// return false if no edit
if (s.equals(t)) {
return false;
}
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != t.charAt(i)) {
if (s.length() == t.length()) {
return s.substring(i + 1).equals(t.substring(i + 1));
} else {
return s.substring(i).equals(t.substring(i + 1));
}
}
}
return true;
}
}
Another implementation:
class Solution {
public boolean isOneEditDistance(String s, String t) {
if (s.length() - t.length() < 0) {
return isOneEditDistance(t, s);
}
if (s.length() - t.length() > 1) {
return false;
}
if (s.equals(t)) {
return false;
}
// s is longer than t or the same length as t
boolean isOneEdit = false;
int j = 0;
boolean isReplace = s.length() == t.length();
for (int i = 0; i < s.length(); i++) {
if (j == t.length() || s.charAt(i) != t.charAt(j)) {
if (isOneEdit) {
return false;
}
if (i == s.length() - 1) {
return true;
}
if (isReplace) {
if (s.charAt(i + 1) == t.charAt(j + 1)) {
isOneEdit = true;
j++;
} else {
return false;
}
} else {
if (j == t.length()) {
return true;
} else if (s.charAt(i + 1) == t.charAt(j)) {
isOneEdit = true;
} else {
return false;
}
}
} else {
j++;
}
}
return true;
}
}