【发布时间】:2014-11-03 06:25:34
【问题描述】:
旋转意味着一个字符串是通过将另一个字符串向右移动一位或多位来创建的。例如 abc 和 cab 是旋转,abcd 和 bacd 不是旋转。 我写了下面的代码,但是它未能通过最后一个测试用例(不知道它是什么)。谁能给我一些关于哪里出错或有没有更有效的算法的提示:
int isLetterInWord(char c, char* word)//find first letter in the word which is equal to c
{
int len = strlen(word);
for(int i=0; i<len; ++i)
{
if(c==word[i])
return i;
}
return -1;
}
int isRotation(char* word1, char* word2)
//check if word1 and word2 are rotation. if so return 1 otherwise -1
{
if(word1 == NULL && word2 == NULL)
return 1;
int len1 = strlen(word1);
int len2 = strlen(word2);
if(len1!= len2)
return -1;
for(int i=0; i<len1; ++i)
{
int pos = isLetterInWord(word1[i], word2);
if(pos == -1)
return -1;
else
{
int p1 = i, p2 = pos;
int cnt=0;
while(cnt<len1)
{
if(word1[p1++]!=word2[p2++])
break;
if(p1==len1)p1=0;
if(p2==len2)p2=0;
cnt++
}
if(cnt==len1)
return 1;
}
}
return -1;
}
【问题讨论】:
-
提示:查看测试用例,看不出它是什么。
-
你不知道你的代码失败的测试用例,所以我假设它是为了编码比赛。错误也可能在于读取要比较的字符串,也许您达到了大小限制或忘记满足空格。长字符串也有超时的可能性;您的解决方案不是最有效的。