为什么O3时间的复杂度不会报TLE
查看原帖
为什么O3时间的复杂度不会报TLE
1193940
jay_zhang楼主2023/12/28 15:43
//11.47
#include<stdio.h>
#include<string.h>
int fun(char str[],char str4[])  //函数 fun 查找第一个子串重叠的下标 
{
	int i,j,count,end=0;
	int len=strlen(str);
	int len4=strlen(str4);
	for(i=0;i<len;i++)
	{
		if(str[i]==str4[0])
		{
			count=0;
			j=i;
			while(count<len4&&j<=len-1)  //count<len4 会困在循环里 
			{
				if(str[j]==str4[count])
				{
					j++;
					count++;
				}
				else
				{
					break;
				}
			}
			if(count==len4)
			{
				end=1;
				return j-count;
			}
		}
	} 
	if(end==0)
	{
		return -1;
	}
}
int main()
{
	int i,j;
	int len;
	int q,k;
	char str[105];
	scanf("%d",&q);
	scanf("%s",str);  //注意 scanf 函数结束之后的回车 enter 键会被后面的 gets(),getc()吃掉所以后面也得用scanf() 
	for(i=0;i<q;i++)
	{
		scanf("%d",&k);  // k 接收第 k 种操作 
		{
			if(k==1)
			{
				char str1[105];
				scanf("%s",str1);
				strcat(str,str1);
				printf("%s\n",str);
			}
			else if(k==2)
			{
				int Index,p;
				scanf("%d %d",&Index,&p);
				for(j=Index;j<Index+p;j++)
				{
					printf("%c",str[j]);
					str[j-Index]=str[j];
				}
				printf("\n");
				str[p]='\0'; 
			}
			else if(k==3)
			{
				int Index;
				int len2;
				char str2[105];
				char str3[105];
				scanf("%d",&Index);
				scanf("%s",str2);
				len=strlen(str);
				len2=strlen(str2);
				 strcpy(str3,&str[Index]);
				strcpy(&str[Index],str2);  //strcpy 地址连接 
				strcat(str,str3);
				puts(str);
			}
			else if(k==4)
			{
				char str4[105];
				scanf("%s",str4);
				printf("%d\n",fun(str,str4));
			}
		}
	}
	return 0;
} 
这个fun()的时间复杂度不是O²吗,放在主函数的for循环里时间复杂度变O3不会超时吗,有没有大神指导一下。感谢
2023/12/28 15:43
加载中...