Jan-22-2018, 08:03 AM
(This post was last modified: Jan-22-2018, 08:03 AM by Gribouillis.)
Here is a version
import unittest as ut import re def subsequence_count(needle, haystack): if len(needle) == 1: return haystack.count(needle) elif len(needle) > 1: a, b = needle[0], needle[1:] result = 0 for mo in re.finditer(a, haystack): result += subsequence_count(b, haystack[mo.end():]) return result else: raise ValueError(('Non empty string expected, got', needle)) class TestSubsequence(ut.TestCase): def test_banana(self): n = subsequence_count('an', 'banana') self.assertEqual(n, 3) def test_panama(self): n = subsequence_count('an', 'trans-Panamanian banana') self.assertEqual(n, 25) if __name__ == '__main__': ut.main()