回文字符串—回文子串—暴力破解法
leetcode地址:5. 最长回文子串
解答参考:动态规划、中心扩散、Manacher 算法
问题描述:
给你一个字符串 s
,找到 s
中最长的回文子串。比如给定字符串s = "babad" ,找出最长的回文子串为"bab"
算法思路:
本题可以采用暴力破解法、中心扩散法、Manacher算法3种方法,本篇文章讲解暴力破解法。根据回文子串的定义,枚举所有长度大于等于 2 的子串,依次判断它们是否是回文;
在具体实现时,可以只针对大于“当前得到的最长回文子串长度”的子串进行“回文验证”;
在记录最长回文子串的时候,可以只记录“当前子串的起始位置”和“子串长度”,不必做截取。这一步我们放在后面的方法中实现。
说明:暴力解法时间复杂度高,但是思路清晰、编写简单。由于编写正确性的可能性很大,可以使用暴力匹配算法检验我们编写的其它算法是否正确。优化的解法在很多时候,是基于“暴力解法”,以空间换时间得到的,因此思考清楚暴力解法,分析其缺点,很多时候能为我们打开思路。
public class Solution {public String longestPalindrome(String s) {int len = s.length();if (len < 2) {return s;}int maxLen = 1;int begin = 0;// s.charAt(i) 每次都会检查数组下标越界,因此先转换成字符数组char[] charArray = s.toCharArray();// 枚举所有长度大于 1 的子串 charArray[i..j]for (int i = 0; i < len - 1; i++) {for (int j = i + 1; j < len; j++) {if (j - i + 1 > maxLen && validPalindromic(charArray, i, j)) {maxLen = j - i + 1;begin = i;}}}return s.substring(begin, begin + maxLen);}/*** 验证子串 s[left..right] 是否为回文串*/private boolean validPalindromic(char[] charArray, int left, int right) {while (left < right) {if (charArray[left] != charArray[right]) {return false;}left++;right--;}return true;}
}
回文字符串—回文子串—暴力破解法相关推荐
- 回文字符串—回文子串—中心扩散法
leetcode地址:5. 最长回文子串 解答参考:动态规划.中心扩散.Manacher 算法 问题描述: 给你一个字符串 s,找到 s 中最长的回文子串.比如给定字符串s = "babad ...
- 回文字符串—回文子串—Manacher算法
leetcode地址:5. 最长回文子串 解答参考:动态规划.中心扩散.Manacher 算法 问题描述: 给你一个字符串 s,找到 s 中最长的回文子串.比如给定字符串s = "babad ...
- 凯撒密码的加密,破解,以及暴力破解法
凯撒密码的加密 #include <stdio.h>int main() { char a[80],b[80];//a为原码,b为加密 int i,k; scanf("%d&qu ...
- C语言判断字符串是否为回文字符串
判断一字符串是否是回文字符串 回文的意思即为该字符串从左往右读出来的值与从右往左读出来的值一样. 代码 #include <stdio.h> #include <stdlib.h&g ...
- leetcode 5. 最长回文子串 暴力法、中心扩展算法、动态规划,马拉车算法(Manacher Algorithm)
给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000.示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...
- 【LeetCode成长之路:回文字符串运用题】 回文子串与最长回文子串
⭐️前面的话⭐️ 本篇文章介绍有关回文字符串两道题题解,分别为[647. 回文子串 ]和[ 5. 最长回文子串], 难度均为: 中等 标签: 双指针中心扩散 动态规划,展示语言java.
- python生成回文字符串_回文字符串最长回文子串和子序列 - Python
Palindrome 回文字符串就是指从前往后和从后往前读,都是一样的,比如"aabcbaa". 注意区分子串和子序列,子串是连续的,子序列可以不连续 题型1:判断字符串是否为回文 ...
- leetCode第五题-求字符串最长回文字符串
原题链接: 最长回文字符串 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"ab ...
- [Leedcode][JAVA][第680题][验证回文字符串Ⅱ][贪心][递归]
[问题描述][第680题][验证回文字符串Ⅱ][简单] 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串.示例 1:输入: "aba" 输出: True 示例 2 ...
最新文章
- ie在线邮件html编辑器,IE中HTML编辑器的修改与使用.doc
- android 同步执行方法吗,Android异步方法以同步方式实现
- VTK:可视化算法之ColoredAnnotatedCube
- ubuntu12.04安装教程
- 有效的Java第三版有哪些新功能?
- android 桌面视频播放器,ZY-Player ,一款跨平台桌面端视频资源播放器
- Spring Cloud实战Zuul统一异常处理
- pve虚拟机导入gho_迁移WIN10和VMW虚拟机到ProXmoX VE(二):PVE设置和迁移windows
- 用maven按环境打包SpringBoot的不同配置文件
- mysql查看平均价个_从MYSQL中重复的​​产品ID查找对应记录(产品价格)的平均值...
- 微信小程序之网易云音乐的实现-云音乐
- app store connect
- Redis学习(二):redis集群之cluster模式下的跨节点的批量操作 I
- 推荐:Redis桌面管理工具RedisDesktopManager
- 【附源码】Java计算机毕业设计计算机配件价格查询微信小程序(程序+LW+部署)
- pdb文件及其作用(转)
- qq拼音输入法的剪切板工具挺好用
- EROFS文件系统工具简介
- 自学java多久可以工作_自学java,学多久可以自己找到工作?
- Ubuntu20.04 安装ROS2 Foxy