Ela的回文串 Hash寫法

2021-10-10 08:38:25 字數 1487 閱讀 8694

看了巨巨們的寫法,都是manacher。

可是我不會

但hash**好!獻上hash寫法!!!

/*

* @autor: kadia

* @date: 2020-11-08 16:22:20

* @lasteditors: kadia

* @connect: [email protected]

* @lastedittime: 2020-11-08 17:59:56

*/#include

typedef

long

long ll;

using

namespace std;

char s[

1005];

unsigned

long

long hashs[

1005];

//正向hash,hashs[i]表示從第乙個字元到i位置的hash值

unsigned

long

long rhashs[

1005];

//逆向hash,rhashs[i]表示從第最後乙個個字元到i位置的hash值

int vis[

1005];

//正向最長喜歡長度,vis[i]表示從i向前的喜歡串的長度

int rvis[

1005];

//逆向最長喜歡長度,rvis[i]表示從i向後的喜歡串的長度

int p=

1333331

;//hash常數

int len;

//輸入的字串的長度

bool

check

(char x)

//判斷字元x是否是喜歡的字元

bool

check

(int mid,

int op)

/*判斷字串是含有回文串的其中一半長度為mid的回文串,這裡是一半是向上取整

*如abba的mid最大是2,aba是mid最大也是2

*這裡的op是一種狀態符號,0表示所check的是偶數串如abba,1表示所check的是奇數串如aba

*/return

false;}

void

hash()

//構建hash值

void

vis(

)//構建vis陣列

rvis[len]=0

;for

(int i=len-

1;i>=

0;i--)}

intmain()

elseif(

check

(mid,1)

)//判斷是否有半串長度為mid的奇數串

else

r=mid-1;

}printf

("%d\n"

,ans);}

return0;

}

判斷回文串,判斷回文數,最長回文串,回文串的個數

判斷乙個字串是否是回文串,首先了解下它的定義 回文串 是乙個正讀和反讀都一樣的字串,比如 level 或者 noon 等等就是回文串。所以判斷是否是回文串,判斷這個字串是否對稱即可。從而用兩個指標同時向中間掃瞄即可判斷。判斷字串是否是回文串,即判斷是否對稱。兩邊指標同時向中間掃瞄,判斷是否相等,不等...

01 回文數的寫法

回文數是指正序 從左向右 和倒序 從右向左 讀都是一樣的整數。可以正常執行的 def func num input 請輸入乙個整數 list1 for i in num if i in 0123456789 else print 您輸入的不是整數 list1 break if len list1 0...

回文串的處理

回文串要新增一些輔助字元 就是在字串之間新增 這個輔助字元,目前這種做法主要的乙個優化是 比如asbsa這個字串。如果左邊的s的回文序列求出來了,右邊的s可以根據左邊的s來求 int p char str,int n int newn 2 n 1 char newstr new char newn ...