2

There are two occurrences of 'aba' in 'ababa' (0th index and 2nd index):

myString = 'ababa'
print(myString.count('aba'))

Yet this code outputs a value of: 1
I know this issue seems really simple, but shouldn't the answer be 2 here?
If not, then isn't the count function not really doing what it's supposed to?

Is there a simple alternative?

Dan
  • 474
  • 1
  • 7
  • 16

2 Answers2

10

From the Python string function documentation

Return the number of non-overlapping occurrences of substring sub in the range [start, end]. Optional arguments start and end are interpreted as in slice notation.

count does not count overlapping occurrences.

If you want to count overlapping occurrences you can use regex with a lookahead assertion:

import re
print(len(re.findall('(?=aba)', 'ababa')))
Moon Cheesez
  • 2,489
  • 3
  • 24
  • 38
Max Feng
  • 352
  • 3
  • 10
2

Documentation to the rescue: https://docs.python.org/2/library/string.html

Return the number of (non-overlapping) occurrences of substring sub in string s[start:end]. Defaults for start and end and interpretation of negative values are the same as for slices.

fulaphex
  • 2,879
  • 3
  • 19
  • 26