只要求出两个字符串的最小表示,然后就可以判断是否循环同构. 枚举最小表示的开头在哪个位置,然后求出Hash值,如果两个串的Hash值集合有交,那么说明循环同构. 因为串经过压缩,原串的长度很大,不能直接枚举开头. 考虑当开头在某个串$A^k$里某个位置时的性质: 假设$A^k$全在开头,现在考虑挪动一个$A$到结尾. 那么如果挪动之后字典序更小了,那么再挪动一个$A$到结尾,比较条件不变. 因此一旦挪动一个$A$之后字典序变小,那么最小表示一定是将$k-1$个$A$全部挪到结尾. 所以对于一个压…