原题:
Given two strings A and B, find the minimum number of times A has to be repeated such that B is a substring of it. If no such solution, return -1.
For example, with A = "abcd" and B = "cdabcdab".
Return 3, because by repeating A three times (“abcdabcdabcd”), B is a substring of it; and B is not a substring of A repeated two times ("abcdabcd").
思路如下:感觉就是拼出来最小的能对B字符串进行测试的情况。
其实就这么简单。我也就是温习下C语言,毕竟已经写了将近一个月的lua了。
代码如下:
int repeatedStringMatch(char* A, char* B) {
int lenA = strlen(A);
int lenB = strlen(B);
char* temp;
temp=(char*)malloc(sizeof(char)*1000000);
strcat(temp,A);
if(lenA>=lenB)
{
if(strstr(A,B)!=NULL)
return 1;
else
{
strcat(temp,A);
if(strstr(temp,B)!=NULL)
return 2;
else
return -1;
}
}
int count=lenA;
int times=1;
while(count<lenB)
{
count=lenA+lenA*times;
times++;
strcat(temp,A);
}
if(strstr(temp,B)!=NULL)
return times;
strcat(temp,A);
if(strstr(temp,B)!=NULL)
return times+=1;
return -1;
}