LeetCode 面试题 01.05. 一次编辑
题目如下:
字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。
示例 1:
输入:
first = “pale”
second = “ple”
输出: True
示例 2:
输入:
first = “pales”
second = “pal”
输出: False
本人的解题思路,仅供个人记录,有好的做法可以交流噢,
class Solution {
public boolean oneEditAway(String first, String second) {
if (first == null || second == null){
return false;
}
int len1 = first.length();
int len2 = second.length();
int ret = len1 - len2;
int count = 0; //变量
int tmp = 0;
if (ret == 0){ //替换
for (int i = 0; i < len1 ; i++) {
if (first.charAt(i) != second.charAt(i)){
count ++ ;
}
}
if (count > 1){
return false;
}
}else if (ret == 1){
for (int i = 0; i < len2 ; i++) {
if ( first.charAt(i) != second.charAt(i)){
count = i ; //记录不相等时索引位置
break;
}else {
tmp = i ; //记录指针的位置
}
}
if (tmp + 1 == len2){return true;}
for (int j = count ; j <len1 - 1 ; j++){
if (first.charAt(j + 1) != second.charAt(j)){
return false;
}
}
}else if (ret == -1){
for (int i = 0; i < len1 ; i++) {
if ( first.charAt(i) != second.charAt(i)){
count = i ; //记录不相等时索引位置
break;
}else {
tmp = i;
}
}
if (tmp + 1 == len1){return true;}
for (int j = count ; j <len2 -1 ; j++){
if (second.charAt(j + 1) != first.charAt(j)){
return false;
}
}
}else {
return false;
}
return true;
}
}
坚持每日刷题打卡