这篇看一下中心扩散算法。

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:输入: "cbbd"
输出: "bb"

代码:

#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<utility>using namespace std;
//最长回文子串//中心扩散算法
class Solution {
public:pair<int, int> expandAroundCenter(const string& s, int left, int right) {while (left >= 0 && right < s.size() && s[left] == s[right]) {--left;++right;}return {left + 1, right - 1};}string longestPalindrome(string s) {int start = 0, end = 0;for (int i = 0; i < s.size(); ++i) {//1个边界条件auto [left1, right1] = expandAroundCenter(s, i, i);//2个相等字母的边界条件auto [left2, right2] = expandAroundCenter(s, i, i + 1);cout << "left1=" << left1 << "," << "right1=" << right1 << endl;cout << "left2=" << left1 << "," << "right2=" << right1 << endl;//判断新的回文子串是否比前面的长if (right1 - left1 > end - start) {start = left1;end = right1;}if (right2 - left2 > end - start) {start = left2;end = right2;}cout << "-------------------" << endl;}cout << "start=" << start << "end=" << end << endl;return s.substr(start, end - start + 1);}
};int main(){string str = "babad";Solution s;auto ret = s.longestPalindrome(str);cout << ret << endl;return 0;
}

运行:

left1=0,right1=0
left2=1,right2=0
-------------------
left1=0,right1=2
left2=2,right2=1
-------------------
left1=1,right1=3
left2=3,right2=2
-------------------
left1=3,right1=3
left2=4,right2=3
-------------------
left1=4,right1=4
left2=5,right2=4
-------------------
start=0end=2
bab

这个分为1位扩散和2位扩散

代码地址:https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zui-chang-hui-wen-zi-chuan-by-leetcode-solution/

中心扩散算法--最长回文子串相关推荐

  1. manacher算法--最长回文子串

    问题概述:输入一个字符串,输出它的最长回文子串 输入样例:                             对应输出: abbaabcba                            ...

  2. (力扣)中心扩散法求最长回文子串

    Question: 给定一个字符串,输出其中最长的回文子串. 几种解法: 暴力枚举:时间复杂度:O(n3)(略) (双层枚举:O(n2)判断是否为回文串:O(n)) 动态规划:时间复杂度O(n2),空 ...

  3. 常考数据结构与算法:最长回文子串

    暴力解法: 列举所有的子串,判断是否为回文串,保存最长的回文串. /** 暴力解法: 列举所有的子串,判断是否为回文串,保存最长的回文串.*/public int getLongestPalindro ...

  4. Manachar算法(马拉车算法):快速求取最长回文子串

    当我们求取最长回文子串时,常见的方法就是中心扩散法,即从字符中心出发,向两边对比,检查是否相等,若等于,则继续检查,并使当前字符中心对应的最长回文子串长度加一,否则,结束该字符中心的回文检查,比较与当 ...

  5. 最长回文子串 : Marcher算法

    相应leetcode题目 leetcode 第5题. 最长回文子串 1.回文串 即从两边开始到中间,对应的字符都相同 public boolean isPalindrome(String str){i ...

  6. LeetCode 05最长回文子串

    题目描述 描述: 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" ...

  7. 20200118:(leetcode)最长回文子串(中心扩展算法详解及思考)

    最长回文子串(中心扩展算法详解及思考) 题目 中心扩展算法详解 代码实现 题目 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: " ...

  8. leetcode 5. 最长回文子串 暴力法、中心扩展算法、动态规划,马拉车算法(Manacher Algorithm)

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000.示例 1: 输入: "babad" 输出: "bab" 注意: &quo ...

  9. 【LeetCode系列】最长回文子串(双指针中心扩散)与可怜的小猪(老鼠毒药问题)

    ⭐️前面的话⭐️ 本篇文章介绍来自牛客试题广场的两道题题解,分别为[最长回文子串]和[可怜的小猪],展示语言java.

最新文章

  1. android字体间距如何修改,【Android】如何改变TextView字体间距
  2. MySQL导出到excle显示不了_mysql导出select语句结果到excel文件遇到问题及解决方法_MySQL...
  3. 安全、稳定、可靠甲骨文定义PaaS新时代
  4. python那么慢为什么还有人用-Python执行效率慢,为什么还这么火?【黑马程序员】...
  5. linux 安装node出现 libstdc++.so.6: wrong ELF class
  6. Py之imgaug:Python库之imgaug简介、安装、使用方法之详细攻略
  7. 基本 XAML 语法指南
  8. 内连接,外链接(左连接、右连接、全连接),交叉连接大总结
  9. js 时间获取格式化 fmt
  10. 邮政编码要被取消了?回应:报道与事实不符
  11. python `__hash__`
  12. Oracle iops升高查看,一则简单的磁盘的iops测试
  13. form表单居中_HTML基本结构、命名及对表单专项练习解释
  14. Python 菜鸟入门 《笨方法学PYthon》、《与孩子一起学编程》
  15. python合并大量ts文件_python合并ts视频
  16. Qt数据库应用3-数据打印到pdf
  17. 服务器怎么格式化系统盘,如何格式化服务器
  18. 这40个自学网站,一年让你“白捡”十几万,快点收藏
  19. 爱尔兰房产泡沫破灭带给我们…
  20. 英文版-恩光照耀-Shine Jesus Shine

热门文章

  1. 【C++ 语言】Visual Studio 配置 POSIX 线程 ( Windows 不支持 POSIX | 配置文件下载 | 库文件说明 | 配置过程 )
  2. 区分 JVM 内存结构、 Java 内存模型 以及 Java 对象模型 三个概念
  3. 【实验吧】CTF_Web_简单的SQL注入之1
  4. Isomorphic Strings
  5. 淘宝旺铺基础版装修出专业版效果(不花钱也一样做到)
  6. maven 在 mac中的配置
  7. PS制作高光导航背景
  8. spring boot: 构建项目时报错Not a managed type
  9. jdbc之防sql注入攻击
  10. js,jq设置获取属性,样式