leetcode笔记----NC17.最长回文子串

这篇博客详细介绍了如何解决LeetCode中的NC17问题,即寻找给定字符串中的最长回文子串。博主通过动态规划的方法来解决此问题,定义了二维布尔型数组dp来存储子串是否为回文的信息,并给出了状态转移方程和边界条件。文章强调了相邻字母的关系以及在不同情况下的判断逻辑。
摘要由CSDN通过智能技术生成

描述
对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。

给定字符串A以及它的长度n,请返回最长回文子串的长度。

本题的回文子串长度和相邻字母息息相关,而且每个位置的子串长度都不相同,都可算作一个子状态,因此能够想到动态规划。但本题的转移方程和临界条件,以及dp数组的定义都比较需要动脑:
首先,dp数组定义为二维的boolean型数组,也就是boolean dp[n][n],n为字符串长度,那么数组中的每个元素就代表从i到j能否构成回文串,如果能的话就是true,否则是初始化的false。
有了动态转移数组之后就是遍历和状态转移,前面说过,每个位置能否构成回文串与相邻位置相关,具体体现在:dp[left+1][right-1]如果是true,那么如果left和right位置的字符若相等则dp[left][rght]也是true,否则为false。
一般情况分析完后还有一些边界情况,如:如果left和right处的字符不相等则可以直接跳过判断,如果right-left<=2,即子串长度小于等于3,那么只要left和right字符相等即可,不用考虑其相邻位置的情况。

import java.util.*;

public class Solution {
   

    public int getLongestPalindrome(String 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值