刷题-力扣-面试题 01.05. 一次编辑
题目链接
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/one-away-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目描述
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = "pale"
second = "ple"
输出: True
示例 2:
输入:
first = "pales"
second = "pal"
输出: False
题目分析
- 根据题目描述,判断是否可以经过一次操作(删除、插入和修改)将一个字符串变为另一个字符串
- 三种操作每次只变动一个字符,可以确定当两个字符串的长度差超过1的时候,一定不可以
- 故可以分为两种情况,长度相等、长度差为1
- 当长度相等时,对应位置字符不一致的情况只可以出现一次
- 当长度差为1时,剩下的字串相等
代码
class Solution {
public:
bool oneEditAway(string first, string second) {
int firstLen = first.length();
int secondLen = second.length();
int clash = 0;
int i = 0;
if (abs(firstLen - secondLen) > 1) { return false; }
if (firstLen == secondLen) {
for (i = 0; i < firstLen; ++i) {
if (first[i] != second[i]) { ++clash; }
}
return clash > 1 ? false : true;
} else {
for (i = 0; i < min(firstLen, secondLen); ++i) {
if (first[i] != second[i]) {
if (first.substr(i, firstLen - i + 1) == second.substr(i + 1, secondLen - i) or first.substr(i + 1, firstLen - i) == second.substr(i, secondLen - i + 1)) {
return true;
} else {
return false;
}
}
}
return true;
}
return true;
}
};