題解:
迴圈同構要求長度一樣,因此可以求出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 ...