Foundation · Module 6 · Lesson 5
Palindrome & partitioning
Compare ends or maintain regions.
15–25 min readLesson 36 of 123
Lesson 36 of 123
1d streakTheory lesson · Step-by-step
Understand Palindrome & partitioning
Compare ends or maintain regions.
Worked approach
Trace the reasoning step by step
- 1Assign a precise meaning to both pointers in Palindrome & partitioning.
- 2Use ordering or a read/write contract to decide which pointer can move safely.
- 3Record a match or write a finalized value before moving past it.
- 4Move at least one pointer monotonically on every iteration.
- 5Test duplicates, crossing pointers, empty ranges, and all-equal values.
Concrete example
Check whether "racecar" is a palindrome.
- 1Compare r/r, a/a, and c/c from the ends.
- 2Pointers meet at e.
Every mirrored pair matches, so the string is a palindrome.
What must remain true (Loop Invariant)
The region discarded by Palindrome & partitioning cannot contain an unexamined valid answer; each pointer move is justified by order or a finalized output position.
Reference pseudocode
1palindromePartitioning(values):
2 left = initialLeft; right = initialRight
3 while pointers describe a valid region:
4 evaluate values[left] and values[right]
5 record a result when the condition matches
6 move the pointer whose region can be eliminated
7 return result
Verify your trace
- • Write the state after every step.
- • Confirm the invariant still holds.
- • Count visited states to derive complexity.
- • Repeat with an edge-case input.
Cost Model
Complexity & Trade-offs
OperationTimeSpaceWhy
Two-end scan
O(n)
O(1)
The bound follows from the number of states visited and the work performed per transition.When to use it
- Sorted pair search, compaction, merging, partitioning, and palindrome checks.
- Replacing nested loops when boundaries move monotonically.
- Maintaining disjoint processed and candidate regions.
Common mistakes
- Moving a pointer without proving the discarded region is impossible.
- Forgetting duplicate skipping in enumeration problems.
- Applying an order-dependent pointer rule to unsorted data.
Practice prompts
- Reproduce the worked Palindrome & partitioning example without looking at the trace.
- Change one input condition and explain whether the Palindrome & partitioning invariant still holds.
- Implement the approach, derive its cost, and compare it with a straightforward baseline.
Mastery check
Can you derive it instead of memorizing it?
State the invariant before looking at code.
Explain why every transition is safe.
Construct a worst-case input.
Name one alternative and its trade-off.