bool isOneEditDistance(string s, string t) { int m = s.length(), n = t.length(); if (m > n) return isOneEditDistance(t, s); if (n - m > 1) return false; bool mismatch = false; for (int i = 0; i < m; i++) { if (s[i] != t[i]) { if (m == n) s[i] = t[i]; else s.insert(i, 1, t[i]); mismatch = true; break; } } return (!mismatch && n - m == 1) || (mismatch && s == t); }
// Must be exactly one distance apart. same then return false bool isOneEditDistance(string s, string t) { int s_len = s.length(), t_len = t.length(); if(abs(s_len-t_len)>1) return false; if(s_len > t_len) return isOneEditDistance(t, s); for(int i=0; i<s_len; i++){ if(s[i]==t[i]) continue; if(s_len == t_len){ // check if already reach the last char return (i+1 == s_len ) ? true : s.substr(i+1) == t.substr(i+1); }else{ // s="ac" t="adc" return s.substr(i) == t.substr(i+1) ; } } return (s_len==t_len) ? false : true; // s="", t="a" s="", t="" }
bool isOneEditDistance(string s, string t) { int m = s.size(), n = t.size(); if(m < n) return isOneEditDistance(t, s); if(s==t || m-n>1) return false; int cnt = 0, i = 0, j = 0; if(m != n) cnt = 1; while(j < n){ if(s[i++] != t[j++]){ if(m==n || i!=j) ++cnt; else --j; } } return cnt==1; }
bool isOneEditDistance(string s, string t) { int m = s.size(), n = t.size(); if (m > n) return isOneEditDistance(t, s); //s is shorter if (s == t || n - m > 1) return false; for (int i = 0; i < m; i++) { if (s[i] == t[i]) continue; //find the first difference if (m == n) return s.substr(i + 1) == t.substr(i + 1); else return s.substr(i) == t.substr(i + 1); } return true; }
bool Solution::isOneEditDistance(string s, string t) { int m = s.length(), n = t.length(); if (m > n) return isOneEditDistance(t, s); if (n - m > 1) return false; int i = 0, shift = n - m; while (i < m && s[i] == t[i]) i++; if (i == m) return shift > 0; if (shift == 0) i++; while (i < m && s[i] == t[i + shift]) i++; return i == m; }
bool isOneEditDistance(string s, string t) { if (s.size() > t.size()) return isOneEditDistance(t,s); const int len_s = s.size(), len_t = t.size(), diff = len_t-len_s; if (diff > 1) return false; int i = 0, j = 0; while (i < len_s && j < len_t && s[i] == t[j]) { i++; j++; } if (i == len_s) return j+1 == len_t; j++; if (diff == 0) i++; while (i < len_s && j < len_t && s[i] == t[j]) { i++; j++; } return i == len_s && j == len_t; }
bool isOneEditDistance(string s, string t) { bool flag = false; int m = s.size(); int n = t.size(); if(m>n) return isOneEditDistance(t,s); if(n-m>1) return false; for(int i=0; i<m; i++){ if(s[i]!=t[i]){ if(m==n){ s[i] = t[i]; }else{ s.insert(i,1,t[i]); } flag = true; break; } } return (!flag && n-m==1) || (flag && s==t); }
bool isOneEditDistance(string s, string t) { int m = s.length(), n = t.length(); /** swap the string s and t to ensure the size of s is smaller than t**/ if(m > n) return isOneEditDistance(t, s); if(n - m > 1) return false; /** check if there exist mismatch char only one time **/ bool mismatch = false; for(int i = 0; i < m; i++) { if(s[i] != t[i]) { if(m == n) s[i] = t[i]; else s.insert(i, 1, t[i]); mismatch = true; break; } } /** 2 cases * 1) all the m char are matched, so we just check to delete the one char rebundant * 2) find the mismatch char, so we replace it and check (s == t) **/ return (!mismatch && n-m==1) || (mismatch && s == t); }
bool isOneEditDistance(string s, string t) { int n = s.length(); int m = t.length(); if (n == m) { int count = 0; for (int i = 0; i < n; ++i) { if (s[i] != t[i]) { count++; } } return count == 1; } else if (n == m + 1) { // n > m if (m == 0) { return true; } int i = 0, j = 0; int count = 0; //ba //a while (i < n && j < m) { if (s[i] != t[j]) { count++; i++; } else { j++; i++; } } return count == 1 || i == j; } else if (n + 1 == m) { return isOneEditDistance(t, s); } else { return false; } }