题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2: 输入: "cbbd"输出: "bb" 方法一暴力求解: 定义一个n*n维的数组flage,flag ...
分类:
其他好文 时间:
2020-03-28 01:04:35
阅读次数:
69
从数据范围不难推出可以用f[][][][],表示由两个字符串来表示的最长大小 并且因为是回文串,所以我们要向头尾加字符,来变大,因为这个是回文子串,也就是连续的一段。 #include<iostream> #include<cstdio> #include<algorithm> #include<s ...
分类:
其他好文 时间:
2020-03-24 23:10:51
阅读次数:
69
题目描述: 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb" code: public class Soluti ...
分类:
其他好文 时间:
2020-03-23 20:04:34
阅读次数:
65
所谓回文,即正反两个方向读结果是一致的。举两个例子 这两个例子代表着回文的奇偶两种形式,对后文的算法也有影响。 在诸多求解这个问题的算法中,个人认为最容易理解,同时性能也较好的是中心扩展法,即: 依次以字符串每一个位置为中心,向两侧扩展,直到两侧字符不同。 要注意两点: 1. 需要考虑奇偶两种情况。 ...
分类:
其他好文 时间:
2020-03-15 11:39:38
阅读次数:
53
首先声明的是这种解法非常非常的原始和不优雅,甚至比暴力递推还要臭长。 对于最长回文子串这种经典的老题目,有很多亮眼的解法,比如与逆序串取交集。 但我们解决问题不能总是依靠这种眼前一亮(虽然很少亮那么一下),我们应该有一些通用的思考方法,可以用来解决绝大部分问题。 问题的解决都有递归和递推的两种描述, ...
分类:
其他好文 时间:
2020-03-11 01:28:31
阅读次数:
68
1、动态规划 首先单个字符就是一个回文子串,如果两个字符都相同就是一个回文子串,三个字符是在一个字符的左右两边加上相同字符而成的回文子串,四个字符是两个字符左右两边加上相同字符形成的回文子串。 不妨以单个字符和双个字符为初始条件去构造动态方程: dp[i][i]=1;//单个字符 dp[i][i+1 ...
分类:
其他好文 时间:
2020-03-10 14:17:17
阅读次数:
42
1:题目描述 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 示例 1: 输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2: 输入: "cbbd"输出: "bb" 来源:力扣(LeetCode) 2:题目分析 回文数是一 ...
分类:
其他好文 时间:
2020-03-03 20:58:17
阅读次数:
82
传送门 这道题显然可以用PAM做出来。 PAM可以算出以字符串的第ii个字符为结尾的回文子串的个数。我们将其存到一个数组l[n],再求一个前缀和就可以把字符串的前i个字符的前缀有多少个回文子串求出来。 然后,我们将PAM清空,倒着做一遍,就可以求出以第i个字符为左端点的回文子串个数r[i]。与它不相 ...
分类:
其他好文 时间:
2020-03-02 12:50:53
阅读次数:
54
题目:输出最长回文子串,原串最长1000 坑:特判s=""; 复习一下马拉车算法,之前写的只求答案,没有要输出子串。 class Solution { public String longestPalindrome(String s) { //特判s="" if(s.length()==0) ret ...
分类:
编程语言 时间:
2020-02-19 15:12:44
阅读次数:
77
回文串是面试常常遇到的问题(虽然问题本身没啥意义),本文就告诉你回文串问题的核心思想是什么。 首先,明确一下什: 回文串就是正着读和反着读都一样的字符串 。 比如说字符串 和 都是回文串,因为它们对称,反过来还是和本身一样。反之,字符串 就不是回文串。 可以看到回文串的的长度可能是奇数,也可能是偶数 ...
分类:
其他好文 时间:
2020-02-17 12:08:12
阅读次数:
57