字符串循环同构 分割

思路来源
同一字符串上两区间循环同构

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;
}

你可能感兴趣的:(随笔)