Mental Model
We try to split a string into parts where each part reads the same forwards and backwards. We explore all ways to do this by trying each possible cut and going back if it doesn't work.
Analogy: Imagine cutting a long ribbon into smaller pieces where each piece is a perfect mirror image if folded. You try cutting at different points, and if a piece isn't symmetrical, you undo the cut and try another place.
s = "a b a c"
Partitions: []
Try cuts: a | b a c
↑
Check if 'a' is palindrome -> yes
Add 'a' to partitions
Partitions: [a]
Try cuts on remaining: b | a c
↑