看了巨巨們的寫法,都是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 ...