美文网首页
最长回文子串 - Rust

最长回文子串 - Rust

作者: 曾大稳丶 | 来源:发表于2022-07-21 11:51 被阅读0次
    image.png

    题目解析

    1. 采用中心分散发。
    2. 采用动态规划。
      这里直接采用动态规划:
      左右位置分别为 left ,right , dp[left][right] 记录是否是回文字符串。如果 str[left] 和 str[right]的值相等,并且dp[left+1][right-1] = true,表示是一个回文字符串。
    
    /// https://leetcode.cn/problems/longest-palindromic-substring/
    pub fn longest_palindrome(s: String) -> String {
        let (mut start,mut end) = (0,0);
        let s = s.chars().collect::<Vec<_>>();
        let mut dp = vec![vec![false;s.len()];s.len()];
        for i in (0..s.len()).rev(){
            for j in i..s.len() {
                if i == j || j - i == 1 && s[i] == s[j]{
                    dp[i][j] = true;
                }else {
                    dp[i][j] = dp[i+1][j-1]&& s[i] == s[j]
                }
                if dp[i][j] && j-i > end-start {
                    start = i;
                    end = j;
                }
            }
        }
        s[start..=end].iter().collect()
    }
    
    
    #[cfg(test)]
    mod tests {
       
        #[test]
        fn longest_palindrome_test() {
            use super::longest_palindrome;
            let s = String::from("babad");
            assert_eq!(String::from("bab"), longest_palindrome(s));
        }
    }
    

    复杂度分析
    空间复杂度: O(n^2)。
    时间复杂度: O(n^2)。

    相关文章

      网友评论

          本文标题:最长回文子串 - Rust

          本文链接:https://www.haomeiwen.com/subject/sieuirtx.html