Skip to main content

rustgym/leetcode/
_5_longest_palindromic_substring.rs

1struct Solution;
2
3use std::iter::FromIterator;
4
5impl Solution {
6    fn longest_palindrome(s: String) -> String {
7        let n = s.len();
8        if n == 0 {
9            return "".to_string();
10        }
11        let s: Vec<char> = s.chars().collect();
12        let mut start = 0;
13        let mut end = 0;
14        for i in 0..n {
15            let mut left = i;
16            let mut right = i;
17            while right + 1 < n && s[right + 1] == s[left] {
18                right += 1;
19            }
20            while left > 0 && right < n - 1 && s[left - 1] == s[right + 1] {
21                left -= 1;
22                right += 1;
23            }
24            if right - left > end - start {
25                start = left;
26                end = right;
27            }
28        }
29        String::from_iter(&s[start..=end])
30    }
31}
32
33#[test]
34fn test() {
35    let s = "babad".to_string();
36    let res = "bab".to_string();
37    assert_eq!(Solution::longest_palindrome(s), res);
38}