zoukankan      html  css  js  c++  java
  • 【LeetCode】5. 最长回文子串

    题目

    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

    示例

    示例一

    输入: "babad"

    输出: "bab"

    注意: "aba" 也是一个有效答案
     
    示例二
    输入: "cbbd"

    输出: "bb"

    解题

     回文:字符串正向读和反向读是一样就叫回文

    1.  一个字符:  肯定是回文
    2. 两个字符:相等
    3. 三个字符:  首尾字符相等
    4. 四个字符:  若首尾相等 && 中间是回文 
    5. .......
    6. Str[i,j] = str[i] == str[j] && str[i+1,j-1] == 回文

    根据上面规律,想到用动态规划解决这个问题

    public string LongestPalindrome(string s)
    {
        if (string.IsNullOrEmpty(s) || s.Length <= 1) return s;
    
        var result = string.Empty;
    
        var dp = new bool[s.Length, s.Length];
    
        for (int i = s.Length - 1; i >= 0; i--)
        {
            for (int k = i; k < s.Length; k++)
            {
                dp[i, k] = s[i] == s[k] && (k - i < 2 || dp[i + 1, k - 1]);
    
                if (dp[i, k] && (k - i + 1) > result.Length)
                {
                    result = s.Substring(i, k - i + 1);
                }
            }
        }
        return result;
    }
    View Code

    相关知识

    1. 动态规划

     来源:力扣(LeetCode)

     链接:https://leetcode-cn.com/problems/longest-palindromic-substring/submissions

  • 相关阅读:
    webstorm
    呐,这是某蒟蒻幼稚的博客 ~~Welcome
    CSP-S 2021 补题记录
    CSP-S 2021 游记
    Tarjan 算法小结
    FHQ Treap 浅析
    2048游戏 (C++ Windows)
    线段树 算法分析
    树状数组 算法分析
    数学期望(ξ) 浅析
  • 原文地址:https://www.cnblogs.com/WilsonPan/p/11730899.html
Copyright © 2011-2022 走看看