杂项-关于strlen()的使用

发现了一个很坑的东西。

看下面两份代码:

//code1
char s[N];
for(int i=0;i<strlen(s);i++)Do();
//code2
char s[N];
for(int i=0;s[i];i++)Do();

意义都是循环一遍字符串。但是!前者的复杂度是O(N2),后者是O(N)的。

因为那个strlen()函数时间复杂度是O(N)的!!

所以如果要用的话一定要先提出来放前面len=strlen(s)。千万不要像代码1那样!!


惨案

代码1:TLE60分:

改后1984ms->85ms

代码2:100分:

原文地址:https://www.cnblogs.com/Tieechal/p/11606191.html