【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 @   WilsonPan  阅读(226)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示