雜湊法判斷字串回文

2022-10-11 18:15:08 字數 399 閱讀 9195

對乙個字串的子字串,判斷回文一般需要o(n)的時間,

但是如果預先處理出子字串的雜湊值,則可以在o(1)的時間判斷。

具體方法是,如果是小寫字母,則可以用26進製數進行記錄。

base=26;

for(...)

ha[i]=ha[i-1]*base+(str[i]-'a');

再反著進行一次雜湊過程

for(...)

ha2[i]=ha2[i+1]*base+(str[i]-'a');

則子串i~j的雜湊值等於

ha[j]-ha[i-1]*pw[j-i]。

其中pw表示base^(i-j)。

但是此時雜湊值會非常大,故可能自然溢位,題目的求解有風險。

多模數雜湊是待了解的做法(沒有風險)。

判斷字串回文

方法一 使用reverse split separator,howmany 把乙個字串分隔成字串陣列 param separator 必需。字串或正規表示式,從該引數指定的地方分割 stringobject param howmany 可選。該引數可指定返回的陣列的最大長度。如果設定了該引數,返回的...

字串處理 回文判斷

題目描述 1.給定乙個字串,判斷其是否為回文串.2.判斷乙個單鏈表是否回文.對於字串,可以從兩頭想中間掃瞄,在掃瞄過程中如果頭和尾的字元始終相同,則該字串是回文串.include include include include using namespace std bool ispalindrom...

字串 遞迴判斷回文

題目描述 若乙個字串的正序與倒序相同,則稱其為回文字串 現在給定乙個字串,使用遞迴的方法,判斷他是否是回文字串。輸入描述 字串,長度不超過100000 輸出描述 若是,則輸出 yes.若不是,則輸出 no.樣例輸入 abcadacba 樣例輸出 yes.include pch.h include i...