反转字符串

描述

写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)

数据范围:数据范围: 0≤n≤10000

要求:空间复杂度 O(n),时间复杂度 O(n)

char* solve(char* str ) {
    // write code here
    if (str == NULL)
    {
        return NULL;
    }

    int len = strlen(str);

    char *out = malloc(len * (sizeof(char) + 1));
    if (out == NULL)
    {
        return NULL;
    }

    for (int j=0,i = len -1; i >= 0; i--,j++)
    {
        out[j] = str[i];
    }

    memcpy(str, out, len);
    free(out);
    return str;
}

函数目的是原地反转字符串,但存在几个问题:

  1. 内存分配错误:malloc(len * (sizeof(char) + 1)) 分配了多余的空间(应该是 len + 1 用于 \0)
  2. 内存泄漏风险:如果 memcpy 前发生错误,out 未被释放
  3. 未处理字符串终止符:反转后的字符串可能缺少 \0
  4. 不必要的内存分配:可以直接在原字符串上反转,无需额外空间

优化后的版本:

#include <string.h>
#include <stdlib.h>

char* solve(char* str) {
    if (str == NULL) {
        return NULL;
    }

    int len = strlen(str); 
//  strlen → 逻辑长度(不包含 \0)
//  sizeof → 物理存储大小(包含 \0)
    for (int i = 0, j = len - 1; i < j; i++, j--) {
        // 交换字符
        char temp = str[i];
        str[i] = str[j];
        str[j] = temp;
    }
    
    return str;
}
  1. 原地操作:直接在原字符串上交换字符,无需 malloc/free,避免内存泄漏风险。
  2. 高效交换:使用双指针(头尾指针)向中间遍历,时间复杂度 O(n/2)。
  3. 正确处理 \0:strlen 已经计算了 \0 之前的位置,反转不影响终止符。
全部评论

相关推荐

头像 会员标识
09-13 21:41
已编辑
中南大学 C++
秋招好像还没结束,但对我来说已经差不多了。211本科985硕士,没论文,非科班出身,这几个标签凑在一起,大概就不该妄想挤进算法岗。想想自己真是走错了好多路。高中搞信息竞赛,大学继续打ACM,虽然最后只是区域赛打铁水平,零零星星只能拿几个蓝桥杯国奖。本科不是计算机专业,靠着那点竞赛底子,保研时也没能挤进985的科班。还被现在被导师忽悠了。他说搞人工智能,我以为是CV/NLP,结果他说的AI是遥感图像处理用的ANN。实验室的服务器甚至有的没有显卡,导师连Python环境都不会配置,整天嚷嚷让学生标注数据。暑假那会儿面C++开发还挺顺利,拿了五六家大厂offer。阴差阳错去做了算法实习,因为时间问题也没能转正。那时候听说AI&nbsp;infra是个方向,想着大模型推理总需要写C++的人吧,就把简历项目都往这个方向靠。问过业内前辈,说技术栈确实相通。还是太天真了。八月底才开始投简历,各大厂连面试都不给。笔试倒是发了一些,大部分都能AK,但做完就石沉大海。总共就面了不到五家公司,全是小厂,倒是给了offer,但总觉得差口气。研究生读得本就痛苦,导师PUA,毕业要求还高。抑郁吃了一年的药才康复。有时候半夜改简历,看着项目经历里那些自己捣鼓的推理优化,忽然觉得可笑——可能我这种半路出家的,本来就不该碰瓷算法岗。可能最难受的是,明明高中就开始写代码,写了这么年算法题,最后连个面试机会都挣不到。导师还在催毕业论文进度,而我连工作都没定下来。要是当初老老实实去做开发就好了。要是没被导师忽悠就好了。要是早点认清自己不是搞算法的料就好了。也许明年春招该回去投C++开发了。只是偶尔还会想起,在实习公司跑通第一个模型的那天下午,显示器里的loss曲线一直在下降,就像我的人生曲线一样,不知道什么时候才能收敛。可惜没要是。
你的秋招简历被谁挂了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务