That was close, but it's actually slightly different:

```
for i in range(0, sequence_length - k + 1, step):
            yield constructor(self[i:i+k])
```

because we need all words to be exactly length ``k``, so the last slice is based on ``k``, not on ``step`` (``step`` is used for figuring out the start, and differs based on the value of ``overlapping``).