【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

posted @ 2019-10-24 12:11  WilsonPan  阅读(...)  评论(...编辑  收藏