日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Manacher算法图解

發(fā)布時(shí)間:2023/11/30 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Manacher算法图解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

看了好久的Manacher算法,覺(jué)得還是要自己畫(huà)一遍,自己把代碼寫(xiě)一遍才能理解

下面分享一下,如果有錯(cuò),希望指正

簡(jiǎn)陋版本的,但是他基本只是做到了求取最長(zhǎng)回文字符串,嚴(yán)格來(lái)說(shuō)它并不是Manacher’s Algorithm-馬拉車算法

#include<stdio.h> 、char qdu[100050]; int manachar() {int i;int res = 0;for (i = 1; qdu[i]; i++){int l = i;int r = i;while (qdu[i] == qdu[r + 1])r++;i = r;while (qdu[l - 1] == qdu[r + 1]) {r++;l--;}if (res < r - l + 1)res = r - l + 1;}return res; } int main() {int loop;qdu[0] = '$';gets(qdu + 1);printf("%d\n", manachar());return 0; }

Manacher’s Algorithm-馬拉車算法 時(shí)間復(fù)雜度O(n)

互聯(lián)網(wǎng)偵察微信公眾號(hào)講解,雖然文章很長(zhǎng),但是他講解的十分清楚

這篇博文簡(jiǎn)單的介紹了思路

下面是核心代碼,我們先看圖

//Manacher算法計(jì)算過(guò)程 int MANACHER(char *st, int len) {int mx = 0, ans = 0, po = 0;//mx即為當(dāng)前計(jì)算回文串最右邊字符的最大值for (int i = 1; i <= len; i++){if (mx > i)Len[i] = min(mx - i, Len[2 * po - i]);//在Len[j]和mx-i中取個(gè)小elseLen[i] = 1;//如果i>=mx,要從頭開(kāi)始匹配while (st[i - Len[i]] == st[i + Len[i]])Len[i]++;if (Len[i] + i > mx)//若新計(jì)算的回文串右端點(diǎn)位置大于mx,要更新po和mx的值{mx = Len[i] + i;po = i;}ans = max(ans, Len[i]);}return ans - 1;//返回Len[i]中的最大值-1即為原串的最長(zhǎng)回文子串額長(zhǎng)度 }

首先對(duì)字符串進(jìn)行預(yù)處理,處理原因是防止偶數(shù)問(wèn)題(可看前面的博文)
處理后的結(jié)果進(jìn)行Manacher算法。
第一個(gè)@是0,其余默認(rèn)從1開(kāi)始計(jì)數(shù)
首先看3 的左右都是#號(hào)所以1+1 = 2;
到了1,它可以數(shù)到6,碰到了@就不相等了,而他的回文字符串長(zhǎng)度也是6
等到了1右邊的#號(hào),我們就可以根據(jù)對(duì)稱特點(diǎn),求出他和1左邊的#號(hào)是同一個(gè)值(前提是這個(gè)沒(méi)有超過(guò)有邊界,黃色橫線所示)
到這里基本就結(jié)束了

這里給出完整代碼,可以自己跑一編,看看效果

#define maxn 1000010 #include <cstdio> #include <iostream> #include <algorithm>using namespace std;char str[maxn] = {"3212343219"};//原字符串 char tmp[maxn << 1];//轉(zhuǎn)換后的字符串 int Len[maxn << 1];//轉(zhuǎn)換原始串 int INIT(char *st) {int i, len = strlen(st);tmp[0] = '@';//字符串開(kāi)頭增加一個(gè)特殊字符,防止越界for (i = 1; i <= 2 * len; i += 2){tmp[i] = '#';tmp[i + 1] = st[i / 2];}tmp[2 * len + 1] = '#';tmp[2 * len + 2] = '$';//字符串結(jié)尾加一個(gè)字符,防止越界tmp[2 * len + 3] = 0;return 2 * len + 1;//返回轉(zhuǎn)換字符串的長(zhǎng)度 } //Manacher算法計(jì)算過(guò)程 int MANACHER(char *st, int len) {int mx = 0, ans = 0, po = 0;//mx即為當(dāng)前計(jì)算回文串最右邊字符的最大值for (int i = 1; i <= len; i++){if (mx > i)Len[i] = min(mx - i, Len[2 * po - i]);//在Len[j]和mx-i中取個(gè)小elseLen[i] = 1;//如果i>=mx,要從頭開(kāi)始匹配while (st[i - Len[i]] == st[i + Len[i]])Len[i]++;if (Len[i] + i > mx)//若新計(jì)算的回文串右端點(diǎn)位置大于mx,要更新po和mx的值{mx = Len[i] + i;po = i;}ans = max(ans, Len[i]);}return ans - 1;//返回Len[i]中的最大值-1即為原串的最長(zhǎng)回文子串額長(zhǎng)度 }int main() {int len = INIT(str);MANACHER(tmp, len); }

總結(jié)

以上是生活随笔為你收集整理的Manacher算法图解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产伦精品免费视频 | 亚洲情趣 | 欧美一区二区大片 | 欧美影视一区二区三区 | 久久久久五月天 | 一区二区三区福利 | 中文字幕亚洲无线码在线一区 | 欧美丝袜一区二区三区 | 青青久视频 | 国产精品久久久一区二区 | 久久理论视频 | v99av| 五月开心播播网 | 久久婷婷五月国产色综合激情 | 九色丨蝌蚪丨成人 | 插插插操操操 | 黄瓜视频污在线观看 | 强迫凌虐淫辱の牝奴在线观看 | 99国产精品视频免费观看一公开 | 超清纯大学生白嫩啪啪 | 日韩另类av | 夜夜春影院 | 97精品自拍| 欧美性色黄大片手机版 | www五月| 午夜精品久久久久久久无码 | 老司机午夜精品视频 | 久久高清无码电影 | 午夜久草| 在线观看av一区 | 日本一区二区在线视频 | 久久加久久 | 黄色一级片. | 国产片91| 人妖粗暴刺激videos呻吟 | 久久久久久久久亚洲 | 亚洲经典在线观看 | 亚洲自拍偷拍色图 | 男人天堂网在线观看 | 被黑人啪到哭的番号922在线 | 国模无码视频一区 | 免费看污视频的网站 | 久久久久99精品成人片三人毛片 | 操极品女神 | 国产二区三区 | 五月少妇 | 免费视频www在线观看网站 | 99自拍| 一区二区三区久久精品 | a毛毛片| 日本一区中文字幕 | 久久99久久99精品蜜柚传媒 | 特级西西444www大精品视频 | 无码人妻aⅴ一区二区三区有奶水 | 日韩精品第三页 | 女同爱爱视频 | 精品少妇一区二区三区 | 奇米狠狠干 | 国产一区二区三区视频 | 青青草在线免费观看 | 欧美成人三级 | 四虎永久网址 | 欧美日韩免费在线视频 | 少妇日韩| 看片地址| gogo人体做爰大胆视频 | 中国美女黄色 | 国产日韩片 | 91精品国产一区二区 | 国产精品久久在线观看 | 婷婷在线影院 | 亚洲剧情在线 | 一级黄色片看看 | 国产成人资源 | 亚洲一区 欧美 | 亚洲AV午夜成人片 | 黄色网在线播放 | 奇米777视频 | 图片区小说区视频区 | 久久久久久网址 | 福利亚洲| 亚洲射色| 亚洲天堂av免费在线观看 | 国产又粗又大又爽视频 | 国产69精品久久久久久久 | 免费在线观看黄网站 | 日本少妇xxxx软件 | 91欧美视频 | 91亚洲一区 | 超碰97成人| 亚洲精品久久久久久久久久久 | 欧美xxxx黑人又粗又长密月 | 日本jizzjizz | 电影《走路上学》免费 | 哺乳喂奶一二三区乳 | 色综合天天操 | 一区二区在线视频观看 | 一级淫片免费看 | 日韩av网站在线 |