# 10 / 12 Given a list of strings where all the strings are of the same length. Return true if there are 2 strings that only differ by 1 character in the same index, otherwise return false. "abcd" and "aacd" differ only by one Input: dict = ["abcd","acbd", "aacd"] Output: true preprocess dict ["abcd","abcd", "aacd"] -> set -> no duplicates ["abcd", "aacd"] "abcd" -> "_bcd" "a_cd" "ab_d" "abc_" "aacd" -> "_acd" "a_cd" ^^^^ match ```python= def findOneDistanceString(strArr): # preprocess strArr strArr = set(strArr) #["abcd","abcd", "aacd"] -> ["abcd", "aacd"] possibilities = set() # a_cd def val(c): return ord(s[i] - 'a') # O(M(len of string arr)x N(lenth of string) x N(concate string)) # loop str until find one distance str for s in strArr: hashOfS = 0 base = 26 for i in range(len(s)): hashOfS += hashOfS*base + val(s[i])) # a b c d # hashOfS = 26^3*a + 26^2*b + 26^1*c + d # _ b c d # hash = 0 + 26^2*b + 26^1*c + d # a _ c d # hash = 26^3*a + 0 + 26^1*c + d mul = 1 for i in range(len(s)-1, -1, -1): # generate new possibilites # "abcd" -> "_bcd" "a_cd" "ab_d" "abc_" tmp = hashOfS - val(s[i])*mul # iter 1: hashOfS - s[-1] * 1 # iter 2: hashOfS - s[-2] * 1*26 # iter 3: hashOfS - s[-3] * 1*26*26 mul *= base if tmp in possibilities: return True possibilities.add(tmp) # not Found return False # _ a -> 0 + 1 # a _ -> 26*1 + 0 ```