问题描述:
字符串有三种编辑操作:插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入: first = "pale" second = "ple" 输出: True
示例 2:
输入: first = "pales" second = "pal" 输出: False
解决方案:
由所给字符串的长度差可以细分为三种情况:
1、长度差>= 2:即多次编辑,可直接判断
2、长度差== 0:即字符串相等,只需要判断是否进行了 1 次的替换操作即可(遍历字符串)
3、长度差== 1:即字符串进行了一次删除或者插入操作,不管是哪种操作,最终所导致的结果就是:造成字符串数组序列差。所以先找出进行过编辑的字符所在位置,再用短的字符串该位置不变,去和长字符串的下一个位置比较即可。
函数代码:
class Solution { public: bool oneEditAway(string first, string second) { int m = first.size(), n = second.size(); if (m - n >= 2 || n - m >= 2) return false; int x = 0; if (m == n) { for (int i = 0; i < n; i++) { if (first[i] != second[i]) x++; if (x == 2) return false; } } else if (m < n) { for (int i = 0; i < n; i++) { if (second[i] != first[i]) { if (second[i + 1] != first[i]) return false; } } } else if (m > n) { for (int i = 0; i < m; i++) { if (first[i] != second[i]) { if (first[i + 1] != second[i]) return false; } } } return true; } };