先解释一下什么是回文字符串,比如说字符串“aba”,无论是从先往后读取还是从后往前读取,结果都是一样的。当给定很长的字符串时,如何快速获取到最长的回文字符串,这也是大厂比较常见的算法面试题,那么这里给出三种解法。

  • 1.暴力穷举法思路:即遍历每种子字符串,然后判断该子字符串是否为回文(即前半部分是否等于后半部分),时间复杂度为O(n*n*n)

暴力穷举

  • 2.中间扩散法

从每一个位置出发,向两边扩散即可。遇到不是回文的时候结束。

1.首先往左寻找与当期位置相同的字符,直到遇到不相等为止。

2.然后往右寻找与当前位置相同的字符,直到遇到不相等为止。

3.最后左右双向扩散,直到左和右不相等。如下图所示:

中间扩散法

3.动态规划法

一开始我刚听到动态规划这个词的时候感觉很高大上,后来经过查找资料发现其实很简单,只不是从下向上的计算,说白了就是空间换时间,把中间的计算结果暂存起来,避免重复计算;

思路:

1.我们用一个 boolean dp[i][j]表示字符串从 i 到 j 这段是否为回文。

2.试想如果dp[i][j]=true,我们要判断 dp[i-1][j+1]是否为回文。

只需要判断字符串在(l-1)和(r+1)两个位置是否为相同的字符,是不是减少了很多重复计算。动态规划关键是找到初始状态和状态转移方程。

初始状态,l=r 时,此时 dp[l][r]=true。

状态转移方程,dp[l][r]=true 并且(l-1)和(r+1)两个位置为相同的字符,此时 dp[l-1][r+1]=true。

动态规划法

jsp判断字符串相等_最长回文字符串三种解法相关推荐

  1. 最长回文子串-三种DP实现

    最长回文子串 https://leetcode-cn.com/problems/longest-palindromic-substring/ 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 ...

  2. python找出字符串中的最长回文串子序列

    回文串,即: nums = 'aba' print(nums == nums[::-1]) # True 反转该序列后和之前元素相等 这里我们需要找出给定字符串里的最长回文串,即: nums = 'a ...

  3. [动态规划|字符串] leetcode 5 最长回文子串

    [动态规划|字符串] leetcode 5 最长回文子串 1.题目 题目链接 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例1: 输入: "b ...

  4. 最长回文字符串——马拉车(Manacher)算法

    最长回文字符串--马拉车(Manacher)算法 说来惭愧,都快要毕业了才写第一篇博客... 回文串 回文串呢,就是在一个字符串中,左半部分和右半部分是镜像对称的字符串,比如abcba,就是一个已c为 ...

  5. leetCode第五题-求字符串最长回文字符串

    原题链接: 最长回文字符串 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"ab ...

  6. matlab回文字符判断程序,(c语言)回文字符串的判断,gets和scanf

    问题描述:判断一个字符串是否是回文字符串.程序分析:回文字符串:回文字符串是指一个字符中的最高位与最低位的字符是一样的,次高位和次低位上的字符是一样的 问题描述: 判断一个字符串是否是回文字符串. 程 ...

  7. 字符串最长回文子串_最长回文子串

    字符串最长回文子串 Problem statement: 问题陈述: Given a string str, find the longest palindromic substring. A sub ...

  8. leetcode 5. Longest Palindromic Substring 字符串中的最长回文数 逐步从O(n^2)优化至线性时间

    题目 解析 思路一 暴力解法 思路二 指针+最大长度 思路3 由中间至两边找回数 思路4 Manacher's algorithm 线性时间 参考文档 题目 链接 给定一个字符串 s,找到 s 中最长 ...

  9. leetcode_最长回文字符串

    题目:Given a string s, find the longest palindromic substring in s. You may assume that the maximum le ...

最新文章

  1. uniny 物体运动到一个点停止_隐藏的几何:各类随机物体中的深层联系
  2. 如何在Linux下安装Docker
  3. EV代码签名证书,支持Windows 10预览版和正式版驱动签名
  4. 《和平饭店》藏玄机,如何做用户行为分析专家?
  5. oracle无法解析连接符,oracle无法解析连接字符串,请教
  6. java警惕自增的陷阱
  7. 高级数据分析1代码_用Python进行数据分析,让你一看就会
  8. mysql1045错误解读_谈谈MYSQL ERROR 1045 错误的解决办法!
  9. php git pull
  10. 前端验证码绘制(canvas)
  11. 【Android笔记】Android引用第三方依赖包library报错解决方法
  12. Au 音频效果参考(合集)
  13. Python - 批量修改文件夹名称
  14. 中国最美的十大宗教名山(图)
  15. HTML中的botton type=reset标签失效(不起作用)的可能原因。
  16. 计算机怎样禁止再添加新用户,Win10如何添加新用户?
  17. matlab高斯型隶属函数,图高斯型隶属函数.PPT
  18. 【2020年4月9我和小峰子的聊天】
  19. 【fastadmin 如何根据用户角色 显示/隐藏 自定义按钮】
  20. 思科模拟器:修改根交换机

热门文章

  1. ffmpeg中av_strlcpy替换了pstrcpy
  2. Apache构建web主机、日志分割及AWStats分析系统
  3. 居然之家:核心业务系统全面上云,采用PolarDB替代传统商业数据库
  4. 提升你的职场竞争力——“低代码开发师”来了!
  5. 如何建设移动 DevOps?
  6. 开发者在家办公第一天,竟然是这样度过的......
  7. 创意总监分享:我是如何做一款手游地图的
  8. 《盗墓笔记》使用的这套技术,让美术可以在场景中任意使用灯光
  9. 万代南梦宫公布了一款游乐园模拟游戏,该产品有什么好玩的?
  10. pip更新方法(win与linux)版本