C 如何确定一个字符串是否是另一个字符串的旋转

C 如何确定一个字符串是否是另一个字符串的旋转,c,string,C,String,我有两个字符串a和b。我想知道a是b的旋转,还是b的旋转,而不创建第三个字符串。字符串a是b的旋转,当且仅当存在L,使得L==lena==lenb,这里有一个偏移量0,到目前为止你是怎么找到这个的?我首先比较了它们的长度,如果匹配的话,我先在b中找到字符串a的第一个字母表,然后逐字符比较。然后在问题中这样说是一个好主意,因为这表明你确实尝试过自己做一些事情。当你问一个问题,而这个问题听起来好像你什么都没试过,这个问题通常会被否决,最终被终结。将来,解释你自己尝试过的事情,这会增加你得到一个好答案

我有两个字符串a和b。我想知道a是b的旋转,还是b的旋转,而不创建第三个字符串。

字符串a是b的旋转,当且仅当存在L,使得L==lena==lenb,这里有一个偏移量0,到目前为止你是怎么找到这个的?我首先比较了它们的长度,如果匹配的话,我先在b中找到字符串a的第一个字母表,然后逐字符比较。然后在问题中这样说是一个好主意,因为这表明你确实尝试过自己做一些事情。当你问一个问题,而这个问题听起来好像你什么都没试过,这个问题通常会被否决,最终被终结。将来,解释你自己尝试过的事情,这会增加你得到一个好答案的机会。有没有算法可以,或者你对运行时间有什么特别的限制?On²On长度不是太难,或多或少是蛮力。我希望它尽可能优化。对于j=0;jWoops。将其编辑到所属位置,并添加了另一个缺少的大括号。给self的教训:在发布代码之前测试代码:仍然缺少一个括号,但是谢谢:我没有希望了。希望它有助于:
int i, j, is_rot;
for (i = 0; i< L; i++){
    is_rot = 1;
    for (j = 0; j<L; j++){
        if (a[ (j + i) %L] != b[j] ){
            is_rot = 0;
            break;
        }
    }
    if (is_rot) return 1;
}
return 0;