牛客hash字串(求迴圈同構)

2021-09-26 02:46:45 字數 1103 閱讀 6826

題解:

迴圈同構要求長度一樣,因此可以求出t的每個迴圈同構的has值,

然後對於輸入的t,求出每個長度為strlen

(t)的子串的has值,判斷

他在t中是否存在即可。

開始的時候has值用map存的,因為每次查詢都要log

(n)的效率,

超時了,所以用了head指標,用mod以內的數對映所有x.

注:因為這樣的時間複雜度極不穩定,有時需要調整mod的值來嘗試

比如這題:

mod=

1007超時

mod=

10007

146ms

mod=

100007

96ms

mod=

10050007

426ms

因此如果**超時可以通過調整mod的值不斷嘗試。

**:#include

using

namespace std;

#define ull unsigned long long

const

int maxn=

2e6+7;

const

int mod=

100007

;const ull base=

123;

char t[maxn]

;ull h[maxn]

,has[maxn]

;int head[mod]

,tol=0;

struct node

rode[maxn]

;void

add(ull x)

intfind

(ull x)

intmain()

int t;

scanf

("%d"

,&t)

;while

(t--

)printf

("%d\n"

,ans);}

return0;

}

牛客 倒置字串

經過函式後變為 beijing.like i 輸入描述 每個測試輸入包含1個測試用例 i like beijing.輸入用例長度不超過100 輸出描述 依次輸出倒置之後的字串,以空格分割 1.先把字串整體倒轉 反轉前 i like beijing.反轉後1 gnijied ekil i 2.把字元傳...

字串同構

字串同構 題目描述 給定兩個字串 s 和 t 確定它們是否是同構的。兩個字串是同構的如果 s 中的字元可以被替換得到 t。所有出現的字元必須用另乙個字元代替,同時保留字串的順序。沒有兩個字元可以對映到同乙個字元,但乙個字元可以對映到自己。注意事項 你可以假定兩個字串 s 和 t 是一樣長度的.樣例 ...

同構字串

給定兩個字串 s 和 t,判斷它們是否是同構的。如果 s 中的字元可以被替換得到 t 那麼這兩個字串是同構的。所有出現的字元都必須用另乙個字元替換,同時保留字元的順序。兩個字元不能對映到同乙個字元上,但字元可以對映自己本身。示例 1 輸入 s egg t add 輸出 true 示例 2 輸入 s ...