面试题. 一次编辑
字符串有三种编辑操作:插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入: first = "pale" second = "ple" 输出: True
示例 2:
输入: first = "pales" second = "pal" 输出: False
代码如下:
//只进行一次编辑有三种情况
//1.替换,两个字符串的长度相等,但其中有一个字符不相等
//2.插入,first<second,并且只有一个字符不一样
//3.删除,first>second,并且只有一个字符不一样
class Solution {
public:bool oneEditAway(string first, string second) {int m=first.size();int n=second.size();if(n-m>1||m-n>1){return false;//两个字符串的长度相差大于1,不只进行一次操作}if(n==m+1){return oneEditAway(second,first);//插入-->与删除刚好相反}int i=0,j=0;int count=0;while(i<m&&j<n){if(first[i]!=second[j]){count++;if(count>=2){return false;}if(m>n)//删除{j--;//为了让原地等待,先回退一步,后面会在向右移一步}}i++;//每次向右移一步j++;//每次向左移一步}return true;}
};