Given the string "mominaracecar", let’s walk through the center expansion algorithm step by step.

The String

Index:  0  1  2  3  4  5  6  7  8  9  10 11 12
Char:   m  o  m  i  n  a  r  a  c  e  c  a  r

For each index, we treat it as the center of a potential palindrome and expand outward. We check two cases per center:

  • Odd-length: single character center — expand(i, i)
  • Even-length: two character center — expand(i, i+1)

i = 1 — Center: 'o' (Odd)

Start with l = 1, r = 1:

block-beta
  columns 13
  b0["m"] b1["o"] b2["m"] b3["i"] b4["n"] b5["a"] b6["r"] b7["a"] b8["c"] b9["e"] b10["c"] b11["a"] b12["r"]
  classDef center fill:#FFD700,stroke:#555,color:#000
  class b1 center

s[0]='m' == s[2]='m' ✓ → expand to l = 0, r = 2:

block-beta
  columns 13
  b0["m"] b1["o"] b2["m"] b3["i"] b4["n"] b5["a"] b6["r"] b7["a"] b8["c"] b9["e"] b10["c"] b11["a"] b12["r"]
  classDef center fill:#FFD700,stroke:#555,color:#000
  classDef match fill:#90EE90,stroke:#555,color:#000
  class b1 center
  class b0,b2 match

l = -1 → out of bounds, stop. Returns (0, 2), length = 3 → update start=0, max_len=3"mom"


i = 2 through i = 5

Centers 'm', 'i', 'n', 'a' — no adjacent matches in either direction. All yield length 1, no updates.


i = 6 — Center: 'r' (Odd)

Start with l = 6, r = 6:

block-beta
  columns 13
  b0["m"] b1["o"] b2["m"] b3["i"] b4["n"] b5["a"] b6["r"] b7["a"] b8["c"] b9["e"] b10["c"] b11["a"] b12["r"]
  classDef center fill:#FFD700,stroke:#555,color:#000
  class b6 center

s[5]='a' == s[7]='a' ✓ → expand to l = 5, r = 7:

block-beta
  columns 13
  b0["m"] b1["o"] b2["m"] b3["i"] b4["n"] b5["a"] b6["r"] b7["a"] b8["c"] b9["e"] b10["c"] b11["a"] b12["r"]
  classDef center fill:#FFD700,stroke:#555,color:#000
  classDef match fill:#90EE90,stroke:#555,color:#000
  class b6 center
  class b5,b7 match

s[4]='n' != s[8]='c' ✗ → stop. Returns (5, 7), length = 3 → no update (ties don’t replace) → "ara"


i = 9 — Center: 'e' (Odd)

Start with l = 9, r = 9:

block-beta
  columns 13
  b0["m"] b1["o"] b2["m"] b3["i"] b4["n"] b5["a"] b6["r"] b7["a"] b8["c"] b9["e"] b10["c"] b11["a"] b12["r"]
  classDef center fill:#FFD700,stroke:#555,color:#000
  class b9 center

s[8]='c' == s[10]='c' ✓ → expand to l = 8, r = 10:

block-beta
  columns 13
  b0["m"] b1["o"] b2["m"] b3["i"] b4["n"] b5["a"] b6["r"] b7["a"] b8["c"] b9["e"] b10["c"] b11["a"] b12["r"]
  classDef center fill:#FFD700,stroke:#555,color:#000
  classDef match fill:#90EE90,stroke:#555,color:#000
  class b9 center
  class b8,b10 match

s[7]='a' == s[11]='a' ✓ → expand to l = 7, r = 11:

block-beta
  columns 13
  b0["m"] b1["o"] b2["m"] b3["i"] b4["n"] b5["a"] b6["r"] b7["a"] b8["c"] b9["e"] b10["c"] b11["a"] b12["r"]
  classDef center fill:#FFD700,stroke:#555,color:#000
  classDef match fill:#90EE90,stroke:#555,color:#000
  class b9 center
  class b7,b8,b10,b11 match

s[6]='r' == s[12]='r' ✓ → expand to l = 6, r = 12:

block-beta
  columns 13
  b0["m"] b1["o"] b2["m"] b3["i"] b4["n"] b5["a"] b6["r"] b7["a"] b8["c"] b9["e"] b10["c"] b11["a"] b12["r"]
  classDef center fill:#FFD700,stroke:#555,color:#000
  classDef match fill:#90EE90,stroke:#555,color:#000
  class b9 center
  class b6,b7,b8,b10,b11,b12 match

r = 13 → out of bounds, stop. Returns (6, 12), length = 7 → update start=6, max_len=7"racecar"


Result

block-beta
  columns 13
  b0["m"] b1["o"] b2["m"] b3["i"] b4["n"] b5["a"] b6["r"] b7["a"] b8["c"] b9["e"] b10["c"] b11["a"] b12["r"]
  classDef result fill:#90EE90,stroke:#555,color:#000
  classDef dim fill:#ddd,stroke:#aaa,color:#999
  class b6,b7,b8,b9,b10,b11,b12 result
  class b0,b1,b2,b3,b4,b5 dim

"racecar" — longest palindromic substring, length 7.