給你乙個字串,對於它的每乙個字首,如果同時是它的字尾的話,那麼輸出這個字首的位置。
擴充套件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...