基本思想:
边界都考虑到了,唯独没考虑到,插入和删除可以算作一种,失策失策;
编码风格被碾压;
具体思路:
class Solution {
public:
bool insert_(string s,string t,int index){
if(s.size()==t.size())
return false;
if(s.size()<t.size()){
s.insert(s.begin()+index,t[index]);
}else{
t.insert(t.begin()+index,s[index]);
}
for(int i=index;i<s.size();i++){
if(s[i]!=t[i])
return false;
}
return true;
}
bool delete_(string s,string t,int index){
if(s.size()==t.size())
return false;
if(s.size()<t.size()){
t.erase(t.begin()+index);
}else{
s.erase(s.begin()+index);
}
for(int i=index;i<s.size();i++){
if(s[i]!=t[i])
return false;
}
return true;
}
bool change_(string s,string t,int index){
if(s.size()!=t.size())
return false;
for(int i=index+1;i<s.size();i++){
if(s[i]!=t[i])
return false;
}
return true;
}
bool isOneEditDistance(string s, string t) {
int m=s.size();
int n=t.size();
if(abs(m-n)>1||m==0&&n==0)
return false;
if(s.size()==0&&t.size()==1||s.size()==1&&t.size()==0)
return true;
for(int i=0;i<min(s.size(),t.size());i++){
if(s[i]!=t[i]){
return delete_(s,t,i)||change_(s,t,i)||insert_(s,t,i);
}
}
if(m==n)
return false;
else
return true;
}
};