Может кто-то со свежей головой подскажет сочетание строк, которое не пройдет.
package com.javarush.task.task39.task3909;
/*
Одно изменение
Реализуй метод isOneEditAway(String first, String second) который будет возвращать true, если возможно
изменить/добавить/удалить один символ в одной из строк и получить другую.
Символы в анализируемой строке ограничены кодировкой ASCII. Регистр символов учитывается.
Требования:
1. Метод isOneEditAway должен корректно работать для строк одинаковой длины.
2. Метод isOneEditAway должен корректно работать для строк разной длины.
3. Метод isOneEditAway должен корректно работать для пустых строк.
4. Метод isOneEditAway должен быть публичным.
*/
public class Solution {
public static void main(String[] args) {
String s1 = "22266";
String s2 = "21266";
System.out.println(isOneEditAway( s1, s2 ));
}
public static boolean isOneEditAway(String first, String second) {
if (first == null || second == null) {
return false;
}
if (first.equals( second )) {
return true;
}
final long firstLength = first.length();
final long secondLength = second.length();
if (secondLength - firstLength > 1) return false;
if (firstLength - secondLength > 1) return false;
if (first.length() > second.length()) {
String buf = second;
second = first;
first = buf;
}
int k = 0;
int diffCount = 0;
for (int i = 0; i < first.length(); i++) {
if (first.charAt( i ) != second.charAt( i + k )) {
if (first.charAt( i ) == second.charAt( i + 1 ) && secondLength > firstLength) {
k = 1;
}
diffCount++;
}
}
for (int i = first.length(); i < second.length(); i++) {
diffCount++;
}
diffCount -=k;
return diffCount == 1? true : false;
}
}