串中任意个连续的字符组成的子序列称为该串的子串。 目标:输入一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。
说明: 输入的字符串只含有小写英文字母,并且长度不超过10000。 输出的可以是布尔类型的值,也可以是 1 或 0,其中 1 表示可以由它的一个子串重复多次 构成,0 相反,能表达出意思即可。
样例1:
输入: "abab"
输出: True (或 1)
样例2:
输入:"aba"
输出:False (或 0)
样例3: 输入:"abcabcabcabc"
输出:True (或 1)
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<malloc.h>
#define max 10000
int main()
{
int len,i,j,*match,lenSub;
char str[max];
scanf("%s", str);
len=strlen(str);//c语言内置函数时间复杂度O(len)
match=(int *)malloc(sizeof(int)*len);
match[0] = -1;
for ( j=1; j<len; j++ )//
{
i = match[j-1];
while ( (i>=0) && (str[i+1]!=str[j]) )//回退的次数不会超过j