2020/5/13
面试题 01.05. 一次编辑**问题描述:**字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例1:
输入: first = "pale" second = "ple" 输出: True
示例2:
输入: first = "pales" second = "pal" 输出: False
- 解题思路:利用双指针模拟
(1)first长度与second长度相差大于1直接放回false
(2)长度相差1:用短的字符串匹配长的字符串
(3)长度相同,直接匹配
代码:
class Solution {
public boolean oneEditAway(String first, String second) {
int m = first.length();
int n = second.length();
//两个字符串长度只差大于1直接返回false
if (!((Math.abs(m - n) == 1) || (Math.abs(m - n) == 0))) return false;
//将String转化为字符数组
char[] f = first.toCharArray();
char[] s = second.toCharArray();
//f记录长字符串
//m是长字符串的长度
if (m < n) {
char[] temp = s;
s = f;
f = temp;
int temp1 = m;
m = n;
n = temp1;
}
//count记录编辑次数
int count = 0;
int i = 0;
int j = 0;
while (i < m && j < n) {
//值相等,i,j都指针向后移动
if (f[i] == s[j]) {
i++;
j++;
} else {//值不相等
//两个字符串长度不等,长字符串的i指针+1(因为长短字符差只能为1)
if (m != n) {
i++;
//字符串长度相等,两个指针都+1,并且记录编辑次数+1
} else {
i++;
j++;
}
count++;
}
if (count > 1) {//编辑次数大于1直接返回false
return false;
}
}
return true;
}
}
总结:
- 对java的包的使用还不够熟练
- 对所有情况的考虑还不完整,导致bug比较多,多用debug。



