题目描述:
给定两个字符串 s 和 t,判断他们的编辑距离是否为 1。
注意:
满足编辑距离等于 1 有三种可能的情形:
往 s 中插入一个字符得到 t
从 s 中删除一个字符得到 t
在 s 中替换一个字符得到 t
示例 1:
输入: s = “ab”, t = “acb”
输出: true
解释: 可以将 ‘c’ 插入字符串 s 来得到 t。
示例 2:
输入: s = “cab”, t = “ad”
输出: false
解释: 无法通过 1 步操作使 s 变为 t。
示例 3:
输入: s = “1203”, t = “1213”
输出: true
解释: 可以将字符串 s 中的 ‘0’ 替换为 ‘1’ 来得到 t。
方法1:
主要思路:
(1)对于长度差异大于1的两个字符串,直接返回false;
(2)单独判断长度相等和长度差异为1的两种情形;
class Solution {
public:
bool isOneEditDistance(string s, string t) {
//长度差异大于1的情形直接返回false
if((s.size()>t.size()&&s.size()-t.size()>1)||(s.size()<t.size()&&s.size()-t.size()<-1)){
return false;
}
int count=0;
//处理长度相同的情形
if(s.size()==t.size()){
int i=0;
//统计两个字符串中的差异
while(i<s.size()){
if(s[i]!=t[i])
++count;
++i;
}
//若差异不是1,则直接返回false
if(count!=1){
return false;
}
}
else {//处理长度差异为1的情形
int i=0;
int j=0;
while(i<s.size()&&j<t.size()){
//统计字符串的字符差异
if(s[i++]!=t[j++]){
++count;
if(s.size()>t.size()){
--j;
}
else{
--i;
}
}
}
//若差异大于1,则返回false
if(count>1){
return false;
}
}
return true;//否则返回true
}
};