pub fn longest_palindromic_substring(s: &str) -> String {
let chars: Vec<_> = s.chars().collect();
let n = chars.len();
if n == 0 { return String::new(); }
let (mut start, mut max_len) = (0, 1);
for i in 0..n {
let (mut l, mut r) = (i as isize, i as isize);
while l >= 0 && r < n as isize && chars[l as usize] == chars[r as usize] {
if (r - l + 1) as usize > max_len {
start = l as usize;
max_len = (r - l + 1) as usize;
}
l -= 1;
r += 1;
}
let (mut l, mut r) = (i as isize, i as isize + 1);
while l >= 0 && r < n as isize && chars[l as usize] == chars[r as usize] {
if (r - l + 1) as usize > max_len {
start = l as usize;
max_len = (r - l + 1) as usize;
}
l -= 1;
r += 1;
}
}
chars[start..start + max_len].iter().collect()
}