public class Solution {
public boolean isOneEditDistance(String s, String t) {
if (s == null || t == null) return false;
int len1 = s.length();
int len2 = t.length();
if (Math.abs(len1 - len2) > 1) return false;
if (len1 > len2) return isOneEditDistance(t, s);
int diff = len2 - len1;
int i = 0;
int j = 0;
while(i < len1 && s.charAt(i) == t.charAt(i)) {
i++;
}
if (diff == 0) {
i++;
}
while(i < len1 && s.charAt(i) == t.charAt(i + diff)) {
i++;
}
return i == len1;
}
}
public class Solution {
public boolean isOneEditDistance(String s, String t) {
int m = s.length();
int n = t.length();
if (m - n >= 2 || n - m >= 2) return false;
if (m == n) {
int num = 0;
for (int i = 0; i < m; ++i) {
if (s.charAt(i) != t.charAt(i)){
num++;
if (num == 2) {
return false;
}
}
}
return num == 1;
}
if (n > m) {
String temp = s;
s = t;
t = temp;
}
int j = 0;
for (int i = 0; i < t.length(); ++i) {
if (s.charAt(j) != t.charAt(i)){
j++;
if (j - i >= 2) {
return false;
}
i--;
}
else j++;
}
if (j == t.length()) return true;
else return s.charAt(s.length() - 1) == t.charAt(t.length() - 1);
}
}