This is a bit shorter
This is a bit shorter

Also,  regarding the initial solution, doesn't
```python
  """
  Runtime: O(n)
  """
  for w in words.split(" "):
```
have the `O(n<sup>3</sup>)` complexity?  `words.split(" ")` is `O(n)` on its own and each time through the loop `python` evaluates `words.split(" ")`. **Strings are immutable.** To get rid of that, you could define `words = words.split(" ")` above so that `python` does not evaluate it every iteration.  Besides, `w = lower(w)` should have `O(n)` on its own. Thus, the overall worst-case complexity must be `O(n<sup>3</sup>)` instead of `O(n)`. Please correct me if I am missing out on anything.
mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview,mre/the-coding-interview