天天看点

经典算法-字符串的颠倒

{

 for(int i =0; j< strlen(s)-1; i {

  char c=s[i];

  s[i]=s[j];

  s[j]=c;

 }

}

此函数原出自kernighan和ritchie合作的经典作品tcpl第二版

评注:此算法无论是从时间复杂度,还是从使用最小空间方面,都应该是最优了。

时间上只用了遍历字符串长度一半的时间,空间上只是创建字符串长度

一半的空间。当然我们还可以从空间上进一步减少使用。

void reverse(char s[])

 char c;

  c=s[i];

我们从外部声明c,这样在整个字符串反转过程中我们就只使用了一个变量。空间使用

更小了!但是我们必须要考虑的一个问题是,当我们传递的字符串只用一个字符的时候,

上面的算法,不如第一个算法效率高,因为上面的这个函数,多创建了一个没有使用的

char对象,并且c++语言推荐:"尽可能推迟对变量声明"。所以真正我还是同意用《tcpl》

上的那种方法,在使用出定义char c=s[i]的形式!

以上讨论我们基于编译器不作任何优化的条件下进行.

继续阅读