One Edit Distance
Given two strings S and T, determine if they are both one edit distance apart.
two pointers.
class Solution { public: bool isOneEditDistance(string s, string t) { int ls = s.size(); int lt = t.size(); if(abs(ls - lt) > 1) return false; int i = 0, j = 0; int dist = 0; while(i < ls && j < lt){ if(s[i] != t[j]){ dist++; if(dist > 1) break; if(ls > lt){ j--; // do not move j } else if(ls < lt){ i--; // do not move i } } i++; j++; } // dist == 1 or only the last character is different. return dist == 1 || (dist == 0 && ls != lt); } };
class Solution { public: bool isOneEditDistance(string s, string t) { int distance = 0; string tmp = s; if(s.size() > t.size()){ s = t; t = tmp; } if(t.size() - s.size() > 1) return false; // replace if(s.size() == t.size()){ for(int i = 0; i < s.size(); i++){ if(s[i] != t[i]){ distance++; } } return distance == 1; } // s is shorter than t if(s.size() == 0) return true; for(int i = 0; i < s.size(); i++){ if(s[i] != t[i]){ t.erase(i, 1); i--; distance++; } if(distance > 1){ break; } } return distance == 1 || distance == 0; } };