package com.anuragkapur.ctci6ed.arraysandstrings;
/**
* @author anuragkapur
*/
public class OneAway {
/**
* Run time complexity: O(n)
*
* @param str1
* @param str2
* @return
*/
public boolean areOneAway(String str1, String str2) {
if (str1 == null || str2 == null) {
return false;
}
if (Math.abs(str1.length() - str2.length()) > 1) {
return false;
}
char chars1[] = str1.toCharArray();
char chars2[] = str2.toCharArray();
if (chars1.length > chars2.length) {
return isOneAway(chars2, chars1);
} else if(chars1.length < chars2.length) {
return isOneAway(chars1, chars2);
} else {
return isOneAway(chars1, chars2);
}
}
private boolean isOneAway(char chars1[], char chars2[]) {
int pointer1 = 0;
int pointer2 = 0;
boolean oneDifferenceSeen = false;
while (pointer1 < chars1.length && pointer2 < chars2.length) {
if (chars1[pointer1] != chars2[pointer2]) {
if (oneDifferenceSeen) {
return false;
} else {
if (chars2.length == chars1.length) {
pointer1 ++;
}
pointer2 ++;
oneDifferenceSeen = true;
}
} else {
pointer1 ++;
pointer2 ++;
}
}
return true;
}
}