Manacher算法學習筆記 | LeetCode#5

Manacher算法學習筆記

DECLARATION

引用來源:https://www.cnblogs.com/grandyang/p/4475985.html

CONTENT

用途:尋找一個字符串的最長回文子串
時間復雜度:O(N)
算法步驟
1.添加特殊字符

由于回文串的長度可奇可偶,比如"bob"是奇數形式的回文,"noon"就是偶數形式的回文,馬拉車算法的第一步是預處理,做法是在每一個字符的左右都加上一個特殊字符,比如加上'#',那么

bob --> #b#o#b#

noon --> #n#o#o#n#

這樣做的好處是不論原字符串是奇數還是偶數個,處理之后得到的字符串的個數都是奇數個,這樣就不用分情況討論了,而可以一起搞定。

2.求每個回文子串的半徑

我們還需要和處理后的字符串t等長的數組p,其中p[i]表示以t[i]字符為中心的回文子串的半徑,若p[i] = 1,則該回文子串就是t[i]本身。

最長子串的長度是半徑減1,起始位置是中間位置減去半徑再除以2。

如何求p數組,需要新增兩個輔助變量mxid,其中id為能延伸到最右端的位置的那個回文子串的中心點位置,mx是回文串能延伸到的最右端的位置,這個算法的最核心的一行如下:
p[i] = mx > i ? min(p[2 * id - i], mx - i) : 1;

代碼實現
Leetcode #5

class Solution {
public:string longestPalindrome(string s) {// Insert '#'string t = "$#";for (int i = 0; i < s.size(); ++i) {t += s[i];t += "#";}// Process tvector<int> p(t.size(), 0);int mx = 0, id = 0, resLen = 0, resCenter = 0;for (int i = 1; i < t.size(); ++i) {p[i] = mx > i ? min(p[2 * id - i], mx - i) : 1;while (t[i + p[i]] == t[i - p[i]]) ++p[i];if (mx < i + p[i]) { //update mx & idmx = i + p[i];id = i;}if (resLen < p[i]) { //update resLen & resCenterresLen = p[i];resCenter = i;}}return s.substr((resCenter - resLen) / 2, resLen - 1);}
};

轉載于:https://www.cnblogs.com/NeilThang/p/10105874.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250032.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250032.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250032.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

content-type對照表

轉載于:https://www.cnblogs.com/mxyr/p/9238329.html

【算法小積累】 - 提取非0數最右側的1

參考 - 69:49 const getRightOne num > {return num & (~num 1); };

解耦合

廣大程序猿同胞&#xff0c;經常會看到“解耦合”&#xff0c;也有很多人&#xff0c;會用這個詞來裝X&#xff0c;但是&#xff0c;實際真正能理解的人&#xff0c;并不多。接下來&#xff0c;帶大家深入淺出的走一遍&#xff0c;如何解耦合。 首先&#xff0c;我們要知道&am…

CentOS安裝和配置Rsync進行文件同步

Liunx系統實現文件同步不需要搭建FTP這類的工具&#xff0c;只需要按照Rsync配置下文件就可以。 本文以Centos7.0為例。 1. 首先關閉SELINUX&#xff08;不關閉無法同步&#xff0c;權限太高了&#xff09; vi /etc/selinux/config #編輯防火墻配置文件 #SELINUXenforcing #注釋…

【linux】 -設備名稱與文件目錄

參考 - 鳥哥的linux私房菜基礎篇 在linux系統中,每個設備都被當成一個文件來對待幾乎所有的硬件設備文件都在/dev這個目錄內 下面給出,常見設備和文件路徑的對應關系 設備設備在Linux中的文件名SCSI、SATA、USB磁盤驅動器/dev/sd[a-p]U盤/dev/sd[a-p] (與SATA相同)Virtio接口/…

數據結構開發(7):典型問題分析(Bugfix)

0.目錄 1.創建異常對象時的空指針問題 2.LinkList 中的數據元素刪除 3.LinkList 中遍歷操作與刪除操作的混合使用 4.StaticLinkList 中數據元素刪除時的效率問題 5.StaticLinkList 是否需要提供析構函數&#xff1f; 6.StLib 是否有必要增加多維數組類&#xff1f; 1.創建異常對…

spring boot 使用視圖modelandview

1&#xff1a;springboot使用視圖解析器&#xff0c;添加依賴 <!-- freemarker模板引擎視圖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency>&…

題解-BOI 2004 Sequence

Problem bzoj & Luogu 題目大意&#xff1a; 給定序列\(\{a_i\}\)&#xff0c;求一個嚴格遞增序列\(\{b_i\}\)&#xff0c;使得\(\sum \bigl |a_i-b_i\bigr|\)最小 Thought 正序&#xff1a;直接對應 逆序&#xff1a;取中位數&#xff08;證明&#xff1a;“醫院設置”&am…

【vscode】編譯java時報錯亂碼

報錯如下 解決方案 改變終端的編碼格式 chcp 946注意: chcp 65001 UTF-8編碼chcp 936 GBK2312代碼頁

搭建集群架構

環境搭建進行規劃(磨刀不誤砍柴工). 集群架構組成說明. 負載均衡服務器使用Nginx做搭建,(nginx反向代理軟件) Nginx01<-------->Nginx02 3臺Web網站服務器,Nginx網站web服務功能 2臺負載均衡服務器 (對網站的流量進行分流,減少流量對某臺服務器的壓力) 3臺web服務器, (處…

Model、ModelMap和ModelAndView的使用詳解

1.前言 最近SSM框架開發web項目&#xff0c;用得比較火熱。spring-MVC肯定用過&#xff0c;在請求處理方法可出現和返回的參數類型中&#xff0c;最重要就是Model和ModelAndView了&#xff0c;對于MVC框架&#xff0c;控制器Controller執行業務邏輯&#xff0c;用于產生模型數據…

【mysql】- 初始化

參考 1、寫配置文件 在mysql的根目錄下創建 my.ini&#xff0c;根目錄的截圖和輸入的內容如下所示。 my.ini的內容如下 [mysql] default-character-setutf8[mysqld] character-set-serverutf8 default-storage-engineINNODB sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,…

【FBI WARNING】一些Noip的黑科技 持續整理!

有疑問或錯誤盡管評論&#xff01;&#xff01; 下面以C為準。 本文手&#xff08;粘&#xff09;打&#xff08;貼&#xff09;于各大博客之間 有問題。。。。。 我也不懂 max、min的優化 我們知道&#xff0c;打max、min時&#xff0c;要用分支&#xff08;if語句&#xff09…

@PathVariable注解使用

PathVariable是spring3.0的一個新功能&#xff1a;接收請求路徑中占位符的值 語法&#xff1a; PathVariable("xxx") 通過 PathVariable 可以將URL中占位符參數{xxx}綁定到處理器類的方法形參中PathVariable(“xxx“) RequestMapping(value”user/{id}/{name}”) 請…

【mysql】- 常用命令

DML - 操作表 SELECT * FROM stu;INSERT INTO stu ( id, NAME ) VALUES ( 1, 張三 );INSERT INTO stu ( id, NAME, sex, birthday, score, email, tel, STATUS ) VALUES( 2, 李四, 男, 1999-11-11, 88.888, lisiitcase.cn, 13812345678, 1 );update stu set sex 女 where nam…

JAVA 框架-Spring-AOP面向切面

AOP&#xff08;Aspect Orient Programming&#xff09;&#xff0c;我們一般稱為面向方面&#xff08;切面&#xff09;編程&#xff0c;作為面向對象的一種補充&#xff0c;用于處理系統中分布于各個模塊的橫切關注點&#xff0c;比如事務管理、日志、緩存等等。AOP實現的關鍵…

互相關和卷積的關系

轉載于:https://www.cnblogs.com/seisjun/p/10134021.html

Thymeleaf3語法詳解

Thymeleaf是Spring boot推薦使用的模版引擎&#xff0c;除此之外常見的還有Freemarker和Jsp。Jsp應該是我們最早接觸的模版引擎。而Freemarker工作中也很常見&#xff08;Freemarker教程&#xff09;。今天我們從三個方面學習Thymeleaf的語法&#xff1a;有常見的TH屬性&#x…

【mysql】約束、外鍵約束、多對多關系

1、約束 DROP TABLE IF EXISTS emp;-- 員工表 CREATE TABLE emp (id INT PRIMARY KEY auto_increment, -- 員工id,主鍵且自增長ename VARCHAR(50) NOT NULL UNIQUE, -- 員工姓名,非空并且唯一joindate DATE NOT NULL, -- 入職日期,非空salary DOUBLE(7, 2) NULL, -- 工資,非空…

SSM+Netty項目結合思路

最近正忙于搬家&#xff0c;面試&#xff0c;整理團隊開發計劃等工作&#xff0c;所以沒有什么時間登陸個人公眾號&#xff0c;今天上線看到有粉絲想了解下Netty結合通用SSM框架的案例&#xff0c;由于公眾號時間限制&#xff0c;我不能和此粉絲單獨溝通&#xff0c;再此寫一篇…