package cracking_the_coding_interview.ch_01;

public class OneAway {

    private static boolean isOneAway(String a, String b) {
        if (Math.abs(a.length() - b.length()) >= 2)
            return false;

        String left  = (a.length() <= b.length()) ? a : b;
        String right = (a.length() <= b.length()) ? b : a;

        boolean isTwoAway = false;
        int leftPtr = 0, rightPtr = 0;

        while (leftPtr < left.length() && rightPtr < right.length()) {
            char leftChar = left.charAt(leftPtr), rightChar = right.charAt(rightPtr);

            if (leftChar == rightChar) {
                leftPtr++;
                rightPtr++;
                continue;
            }

            if (isTwoAway) {
                return false;
            }

            if (left.length() == right.length()) {
                leftPtr++;
            }

            isTwoAway = true;
            rightPtr++;
        }

        return true;
    }

}