思路来源
同一字符串上两区间循环同构
char s[maxn];
int same(int l1, int r1, int l2, int r2)
{
int i = 0;
int j = 0;
int len = (r1 - l1 + 1);
int k = 0;
int cnt = 0;
while((i <= r1 or j <= r2) and i <= len + r1 and j <= r2 +len && k < len)
{
while(s[l1 + (i + k) % len] == s[l2 + (j + k) % len] && k <= len + 1)
{
k ++;
}
cnt += k;
if(k >= len)
break;
if(cnt > len * 4)
break;
if(s[l1 + (i + k) % len] > s[l2 + (j + k) % len])
{
i = i + k + 1;
k = 0;
}
if(s[l1 + (i + k) % len] < s[l2 + (j + k) % len])
{
j = j + k + 1;
k = 0;
}
}
if(k >= len)
return 1;
else
return 0;
}