/** * 161. One Edit Distance * https://www.lintcode.com/problem/one-edit-distance/description * Given two strings S and T, determine if they are both one edit distance apart. One ediit distance means doing one of these operation: insert one character in any position of S delete one character in S change one character in S to other character Example 1: Input: s = "aDb", t = "adb" Output: true Example 2: Input: s = "ab", t = "ab" Output: false Explanation: s=t ,so they aren't one edit distance apart * */ class Solution { fun isOneEditDistance(s: String, t: String): Boolean { if (s == t) { return false } var diffCount = 0 val l1 = s.length val l2 = t.length if (Math.abs(l1 - l2) > 1) { return false } var i = 0 var j = 0 while (i < l1 && j < l2) { if (s[i] == t[j]) { i++ j++ } else { diffCount++ if (diffCount > 1) { return false } //if length of one string is more, //then only possible edit is remove a character if (l1 > l2) { i++ } else if (l1 < l2) { j++ } else { i++ j++ } } } //check if last character extra in any string if (i < l1 || j < l2) { diffCount++ } return diffCount == 1 } }