给定两个字符串 s
和 t
,如果它们的编辑距离为 1
,则返回 true
,否则返回 false
。
字符串 s
和字符串 t
之间满足编辑距离等于 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。
提示:
0 <= s.length, t.length <= 104
s
和t
由小写字母,大写字母和数字组成
Related Topics
简单逐字符比较
比较简单,就挨个比较没啥太多细节,动态规划解法的话,还是有点点复杂的,不过拿来做这题有点过了
class Solution {
public boolean isOneEditDistance(String s, String t) {
if (s.length() - t.length() > 1 || t.length() - s.length() > 1){
return false;
}
if (s.length() == t.length()){
return checkSameLength(s,t);
}
if (s.length() > t.length()){
return checkOneCharDiff(s,t);
}else{
return checkOneCharDiff(t,s);
}
}
public boolean checkOneCharDiff(String s, String t){
int sIdx = 0;
int tIdx = 0;
int sameCount = 0;
while (tIdx<t.length() && s.charAt(sIdx) == t.charAt(tIdx)){
sIdx++;
tIdx++;
sameCount++;
}
sIdx++;
while (tIdx<t.length() && s.charAt(sIdx) == t.charAt(tIdx)){
sIdx++;
tIdx++;
sameCount++;
}
return s.length()-sameCount == 1;
}
public boolean checkSameLength(String s, String t){
int sIdx = 0;
int tIdx = 0;
int sameCount = 0;
while (sIdx<s.length() && s.charAt(sIdx) == t.charAt(tIdx)){
sIdx++;
tIdx++;
sameCount++;
}
sIdx++;
tIdx++;
while (sIdx<s.length() && s.charAt(sIdx) == t.charAt(tIdx)){
sIdx++;
tIdx++;
sameCount++;
}
return s.length()-sameCount == 1;
}
}
发表评论