字尾陣列求最長回文子串 POJ 3974

2021-06-03 10:44:41 字數 728 閱讀 3569

mle了...囧,不過演算法是正確的

#define maxn 2000010

int wa[maxn],wb[maxn],wv[maxn],wss[maxn];

int r[maxn],sa[maxn];

int cmp(int *r,int a,int b,int l)

void da(int *r,int *sa,int n,int m)

r[n] = 0;

da(r,sa,n+1,199);

calheight(r,sa,n);

init_rmq(n);

int ans=0;

for(i=0;i字尾陣列雖然強大,但是缺點就是常數大,空間大,就像這題。。。改用擴充套件kmp就明顯不同,空間、時間都有明顯改進,思路參考這裡 複雜度為o(nlgn)

#define n 1100100

int b[n];

void ex_kmp(char *s,char *t,int ls,int lt,int *a)s[n-i-1] = '\0';

ex_kmp(s,t,n,n-mid,a1);

///for(i=0;i=mid-i)

}for(i=mid;i=i-mid)

}dfs(str,mid);

dfs(str+mid,n-mid);

}int main()

return 0;

}

URAL 1297 字尾陣列 求最長回文子串

思路 這題下午搞了然後一直wa,後面就看了discuss,裡面有個陣列 abcdefdcba,這個我輸出abcd,所以錯了。然後才知道自己寫的字尾陣列對這個回文子串有bug,然後就不知道怎麼改了。然後看題解,裡面都是用rmq先預處理任意兩個字尾的最長公共字首,因為不太知道這個,所以又看了一下午,嘛嘛...

字尾陣列求最長公共子串 POJ 2774

根據羅的 兩個串的中間要加乙個ascii碼比任何字母都小的字元 最長公共子串 pku2774,ural1517 給定兩個字串a 和b,求最長公共子串。演算法分析 字串的任何乙個子串都是這個字串的某個字尾的字首。求a 和b 的最長公共子串等價於求a 的字尾和b 的字尾的最長公共字首的最大值。如果列舉a...

求最長回文子串

求最長回文子串,大概有以下幾種方法 1 錯誤!先翻轉再求最長公共子串 例如 abcdafdcba abcd x 即原串中包含翻轉串的子串時 2 暴力 遍歷每個字串,然後判斷是否是回文子串並記錄最長資訊 時間複雜度o n 3 3 動態規劃 時間複雜度o n 2 空間複雜度o n 2 dp i j 表示...