Google 暑期实习电话面算法题。
Phone Interview Compare keyboard events sequences
1 2 # abc123\b123\b -> abc1212 # abc1212 -> abc1212
Time O(n), Space O(n) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 def convert(s): res = [] index = 0 for i in range(len(s)): # abc12123 if s[i] != '\b': if len(res) == index: res.append(s[i]) else: res[index] = s[i] index += 1 else: if index == 0: continue else: index -= 1 return ''.join(res[:index]) def compare(s1, s2): return convert(s1) == convert(s2)
Time O(n), Space O(1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 def get_char(s, p): cnt = 0 while p >= 0 and (cnt > 0 or s[p] == '\b'): if s[p] == '\b': cnt += 1 else: cnt -= 1 p -= 1 return p def compare_(s1, s2): p1 = len(s1) - 1 p2 = len(s2) - 1 while p1 >= 0 and p2 >= 0: p1 = get_char(s1, p1) p2 = get_char(s2, p2) if p1 >= 0 and p2 >= 0: if s1[p1] != s2[p2]: return False else: p1 -= 1 p2 -= 1 p1 = get_char(s1, p1) p2 = get_char(s2, p2) return p1 < 0 and p2 < 0
Test Case 1 2 3 4 5 6 assert(compare_('', '2\b') == True) assert(compare_('', '12\b') == False) assert(compare_('1', '12\b') == True) assert(compare_('', '\b2\b') == True) assert(compare_('', '12\b2\b') == False) assert(compare_('1', '123\b2\b\b') == True)