我总是使用c代码将字符串反转为:
但是我想要一个优化的代码,除了我提到的那个之外,还可以减少这个问题的时间复杂度。我试过谷歌搜索,但没有找到任何相关的解决方案。
答案 0 :(得分:4)
如果“时间复杂度”指的是排除系数和低阶项的大O符号,那么你将无法击败简单的O(n)算法来反转C字符串。
如果您指的是特定机器(或机器类)执行操作所需的时间,则有许多方法可以优化反转。典型的优化包括loop unrolling,通过机器字而不是字符消耗字符machine word,以及智能搜索终止NUL字符。免费提供的GNU libc包含examples of such optimizations。
上述一些优化(例如循环展开)可以通过优化编译器自动实现。其他人可能会在某些平台上适得其反,或者他们的加速取决于字符串的大小。在某些情况下,手写优化可能会妨碍编译器自己优化代码的工作。确保您不会让事情变得更糟的唯一方法是,开发一个涵盖您的预期用途的基准测试,并在您进步时仔细地对您的代码进行基准测试。
答案 1 :(得分:0)
for(fctr=0,bctr=len-1;fctr<len/2;fctr++,bctr--)
{
temp=str[fctr];
str[fctr]=str[bctr];
str[bctr]=temp;
}
这可能会很快!