POJ 2752 (擴充套件kmp)

2021-08-22 15:15:54 字數 918 閱讀 1070

給你乙個字串,對於它的每乙個字首,如果同時是它的字尾的話,那麼輸出這個字首的位置。

擴充套件kmp求一下next陣列,然後掃一遍每個位置,如果這個位置的next值(也就是這個位置的字尾和字首的最大匹配長度)是等於字尾長度的話,也就是說這個位置的字尾同時也是它的字首的話,那麼這個位置就是乙個答案。

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

std::pair;

typedef

long

long ll;

typedef

unsigned

long

long ull;

typedef pair pii;

typedef pairint> ppi;

typedef pairint> pli;

const

double pi=acos(-1);

const

int maxn = 4e5+10;

const

int maxm = 1e6 + 10;

const

int mod = 1e9+7;

const

int inf = 0x3f3f3f3f;

using

namespace

std;

int nex[maxn];

void getnext(string t)

printf("\n");

}}

poj2752 字串子KMP應用

統計字首字尾相等的個數,包括自身,從小到大輸出。可以通過next向前統計。因為每乙個next i 都指向該串前部字串 p0p1.pk 1 與i之前字串相等 pi k 1.pi 2pi 1 的最大字串,只要再向前統計字串的匹配個數,即可得到更小的匹配情況。還有,開大的陣列的話,不能子main 裡面開,...

poj2752 字串子KMP應用

統計字首字尾相等的個數,包括自身,從小到大輸出。可以通過next向前統計。因為每乙個next i 都指向該串前部字串 p0p1.pk 1 與i之前字串相等 pi k 1.pi 2pi 1 的最大字串,只要再向前統計字串的匹配個數,即可得到更小的匹配情況。還有,開大的陣列的話,不能子main 裡面開,...

POJ2752KMP逆序處理

題意 給你乙個串,問你都哪些位置即使字首又是字尾。思路 可以用kmp來做,嘗試過很多種方法,想把兩個串接起來然後.失敗,後來又想可以倒著匹配,就是把整個串倒過來.失敗,說下第三種也是成功的方法,就是正常匹配,然後找到最後乙個的next,如果是0,那麼就不用找了,否則裡面的數值是答案,然後再找next...