博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法题——最长回文子串
阅读量:2344 次
发布时间:2019-05-10

本文共 1203 字,大约阅读时间需要 4 分钟。

1. 本题知识点

动态规划

2. 题目描述

给你一个字符串 s,找到 s 中最长的回文子串。

输入:

s = "cbbd"

输出:

"bb"

3. 解题思路

  1. 首先找子串,设置左右边界,移动边界找子串

  2. 判断子串是否回文,使用 boolean 类型的二维数组记录是否回文

    a...ai   j
    dp[i,j] = s[i]==s[j] && s[i+1]==s[j-1]

4. 代码

public class Solution {
public String longestPalindrome(String s) {
int length = s.length(); if (length == 0) {
return ""; } String maxStr = s.substring(0, 1); boolean[][] dp = new boolean[length][length]; // 遍历数组 for (int right = 1; right < length; right++) {
for (int left = 0; left < right; left++) {
// 两端不相等,即不回文 if (s.charAt(left) != s.charAt(right)) {
continue; } // 两端相等,即回文 if (left + 1 >= right - 1) {
// 两端相邻 dp[left][right] = true; } else {
dp[left][right] = dp[left + 1][right - 1]; } // 设置回文串 if (dp[left][right] && right - left + 1 > maxStr.length()) {
maxStr = s.substring(left, right + 1); } } } return maxStr; }}

转载地址:http://ncjvb.baihongyu.com/

你可能感兴趣的文章
1.block_inode
查看>>
2.Linux文件和目录之间对应关系
查看>>
4.硬链接和软链接
查看>>
可能返回 null 的 SQL 语句
查看>>
以下关于STL的描述中,错误的有
查看>>
假设某棵二叉查找树的所有键均为1到10的整数,现在我们要查找5。下面____不可能是键的检查序列。
查看>>
给定一个整数sum,从有N个无序元素的数组中寻找元素a、b、c、d,使得 a+b+c+d =sum,最快的平均时间复杂度是____。
查看>>
设二叉树结点的先根序列、中根序列和后根序列中,所有叶子结点的先后顺序____。
查看>>
将整数序列(7-2-4-6-3-1-5)按所示顺序构建一棵二叉排序树a(亦称二叉搜索树),之后将整数8按照二叉排序树规则插入树a中,请问插入之后的树a中序遍历结果是____。
查看>>
IP地址、子网掩码、网络号、主机号、网络地址、主机地址
查看>>
已知int a[]={1,2,3,4,5};int*p[]={a,a+1,a+2,a+3};int **q=p;表达式*(p[0]+1)+**(q+2)的值是____。
查看>>
CPU输出数据的速度远远高于打印机的打印速度,为了解决这一矛盾,可采用()
查看>>
整型字符常量和字符字面量的区别 sizeof(char) 和 sizeof('a')
查看>>
表的主键特点中,说法不正确的是()
查看>>
用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数
查看>>
冯诺依曼工作方式的基本特点是____
查看>>
下列关于文件索引结构的叙述中,哪些是正确的?
查看>>
Java异常处理
查看>>
JQueryUI实现对话框
查看>>
Java流(Stream)/文件(File)/IO
查看>>