fn longest_palindrome(s: String) -> String:
if len(s) == 0:
return s
longest = String("")
for i in range(len(s)):
left, right = i, i
find_longest(left, right, s, longest)
left, right = i, i + 1
find_longest(left, right, s, longest)
return longest
fn find_longest(mut left: Int, mut right: Int, s: String, mut longest: String):
while 0 <= left and right < len(s) and s[left] == s[right]:
if right - left + 1 > len(longest):
longest = s[left : right + 1]
left -= 1
right += 1
from testing import assert_true
fn main() raises:
var s: String = "babad"
var expected: String = "bab"
result = longest_palindrome(s)
assert_true(result == expected, "Assertion failed")
s = "cbbd"
expected = "bb"
result = longest_palindrome(s)
assert_true(result == expected, "Assertion failed")
s = "racecar"
expected = "racecar"
result = longest_palindrome(s)
assert_true(result == expected, "Assertion failed")