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) {
        System.out.println(isOneEditAway("", "")); // true
        System.out.println(isOneEditAway("", "m")); //true
        System.out.println(isOneEditAway("m", "")); //true
        //System.out.println(isOneEditAway("m", null)); //
        System.out.println("------");
        System.out.println(isOneEditAway("mama", "ramas")); //false
        System.out.println(isOneEditAway("mamas", "rama")); //false
        System.out.println(isOneEditAway("rama", "mama")); //true
        System.out.println(isOneEditAway("mama", "dama")); //true
        System.out.println(isOneEditAway("ama", "mama"));  //true
        System.out.println(isOneEditAway("mama", "ama")); //true
    }

    public static boolean isOneEditAway(String first, String second) {
        int len1 = first.length();
        int len2 = second.length();
        int delta = Math.abs(len1 - len2);

        if (delta > 1)
            return false;

        if (first.equals("") && second.equals(""))
            return true;

        if(first.equals(second))
            return true; //Странно это... Т.к. по условию задачи, True - только когда возможно изменение... Но валидатору виднее

        StringBuffer s1 = (first.length() >= second.length()) ? new StringBuffer(first) : new StringBuffer(second);
        StringBuffer s2 = (first.length() < second.length()) ? new StringBuffer(first) : new StringBuffer(second);

        for (int i = 0; i < s2.length(); i++) {
            int pos = s1.indexOf(String.valueOf(s2.charAt(i)));
            if (pos != -1)
                s1.deleteCharAt(pos);
        }

        if (s1.length() == 1)
            return true;

        return false;

    }
}

@@ -1264,25 +1264,25 @@
 (%22am
-a
+ms
 %22, %22
-mama
+amm
 %22));  //
 true
@@ -1277,19 +1277,20 @@
 %22));  //
-tru
+fals
 e%0A      
@@ -1660,32 +1660,33 @@
   return true;%0A%0A
+%0A
         if(first
@@ -2108,24 +2108,25 @@
 h(); i++) %7B%0A
+%0A
             
@@ -2130,43 +2130,27 @@
    i
-nt pos = s1.indexOf(String.valueOf(
+f (s1.charAt(i) != 
 s2.c
@@ -2158,19 +2158,21 @@
 arAt(i))
-);%0A
+ %7B%0A%0A 
         
@@ -2179,23 +2179,33 @@
     
+   
 if (
-pos != -1)%0A
+delta != 0) %7B%0A    
     
@@ -2236,101 +2236,307 @@
 rAt(
-pos);%0A        %7D%0A%0A        if (s1.length() == 1)%0A            return true;%0A%0A        return false
+i);%0A                %7D else %7B%0A                    s1.deleteCharAt(i);%0A                    s2.deleteCharAt(i);%0A                %7D%0A%0A                break;%0A            %7D%0A        %7D%0A%0A        if (s1.length() != s2.length()) s1.deleteCharAt(s1.length()-1);%0A%0A        return s1.toString().equals(s2.toString())
 ;%0A%0A 

Update Solution.java