题目

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

示例

示例一

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。 输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案   示例二 输入: "cbbd"
输出: "bb"

解题

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

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

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

【LeetCode】5. 最长回文子串 算法 第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

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄