字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = “pale”
second = “ple”
输出: True
示例 2:
输入:
first = “pales”
second = “pal”
输出: False
分析
没什么好分析的,题目很直接。
一、分开思路
既然题目已经说了:插入一个字符、删除一个字符 或者 替换一个字符,那么直接按照这种思路写额外的三个方法。
- 插入 和 删除是倒过来的一样方法,也就是长度差 1 且除了差的这一个,其他完全一样。
- 完全一样,长度差 0 ,这种情况可能 (1) 完全相等,(2) 可能差一个,或者(3) 差超过两个(false);
- 长度差超过两个。
这样就可以写出一个冗余度比较高,但是正确的代码:
class Solution {
public boolean oneEditAway(String first, String second) {
char[] a=first.toCharArray();
char[] b=second.toCharArray();
if(a.length==0&&b.length==0){
return true;
}
if(a.length-b.length>1||a.length-b.length<-1){
return false;
}
//在保证字符数相差不超过一个的情况下再判断能否通过操作
boolean ans1= a.length>b.length?