This notebook was prepared by Donne Martin. Source and license info is on GitHub.
Complexity:
Complexity:
class Solution(object):
def find_diff(self, str1, str2):
if str1 is None or str2 is None:
raise TypeError('str1 or str2 cannot be None')
seen = {}
for char in str1:
if char in seen:
seen[char] += 1
else:
seen[char] = 1
for char in str2:
try:
seen[char] -= 1
except KeyError:
return char
if seen[char] < 0:
return char
for char, count in seen.items():
return char
def find_diff_xor(self, str1, str2):
if str1 is None or str2 is None:
raise TypeError('str1 or str2 cannot be None')
result = 0
for char in str1:
result ^= ord(char)
for char in str2:
result ^= ord(char)
return chr(result)
%%writefile test_str_diff.py
import unittest
class TestFindDiff(unittest.TestCase):
def test_find_diff(self):
solution = Solution()
self.assertRaises(TypeError, solution.find_diff, None)
self.assertEqual(solution.find_diff('ab', 'aab'), 'a')
self.assertEqual(solution.find_diff('aab', 'ab'), 'a')
self.assertEqual(solution.find_diff('abcd', 'abcde'), 'e')
self.assertEqual(solution.find_diff('aaabbcdd', 'abdbacade'), 'e')
self.assertEqual(solution.find_diff_xor('ab', 'aab'), 'a')
self.assertEqual(solution.find_diff_xor('aab', 'ab'), 'a')
self.assertEqual(solution.find_diff_xor('abcd', 'abcde'), 'e')
self.assertEqual(solution.find_diff_xor('aaabbcdd', 'abdbacade'), 'e')
print('Success: test_find_diff')
def main():
test = TestFindDiff()
test.test_find_diff()
if __name__ == '__main__':
main()
Overwriting test_str_diff.py
%run -i test_str_diff.py
Success: test_find_diff