Friday, March 25, 2016

LeetCode Q161: One Edit Distance

Given two strings S and T, determine if they are both one edit distance apart.


class Solution {
public:
bool isOneEditDistance(string s, string t) {
if(t.length()<s.length())
swap(s, t);
if(t.length()-s.length()>1)
return false;
if(s.length()==0&&t.length()==0)
return false;
if(s.length()==t.length()){
int diffMet=0;
for(int i=0; i<s.length(); i++){
if(s[i]!=t[i]){
if(diffMet==0)
diffMet=1;
else
return false;
}
}
return diffMet==1;
}
if(t.length()<s.length())
swap(s, t);
int p0=0, p1=0;
int diffMet=0;
for(p0=0; p0<s.length(); ){
if(s[p0]==t[p1]){
p0++; p1++;
continue;
}else{
if(diffMet==0){
diffMet=1;
p1++;
}else
return false;
}
}
return true;
}
};


Round 2 solution:
class Solution {
public:
bool isOneEditDistance(string s, string t) {
if(t.length()<s.length())
return isOneEditDistance(t, s);
if((s.length()==0&&t.length()==0)||t.length()-s.length()>=2)
return false;
if(s.length()==t.length()){
int diff=0;
for(int i=0; i<s.length(); i++){
if(s[i]!=t[i]){
if(++diff>1)
return false;
}
}
if(diff!=1)
return false;
}else{
int i=0, j=0;
int diff=0;
while(i<s.length()&&j<t.length()){
if(s[i]==t[j]){
i++; j++;
}else{
j++;
if(diff++>1)
return false;
}
}
if(diff!=1&&j!=t.length()-1)
return false;
}
return true;
}
};
view raw Q161Rnd2.cpp hosted with ❤ by GitHub

No comments:

Post a Comment