leetcode刷题,反转字符串中的单词

反转字符串中的单词

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序
在这里插入图片描述
问题分析:此类问题,很明显两种解法,第一种为空间换时间,首先定义一个数组,长度与原来类似,在遍历过程中,遇到空格则执行一次反转,且每次记录位置,这样就能得到一个新的数组,且数组中每个单词都是反转了的。代码如下:

char* reverseWords(char* s) {
    int length = strlen(s);
    char* ret = (char*)malloc(sizeof(char) * (length + 1));//定义一个数组存储需要逆置的字符
    ret[length] = 0;
    int i = 0;
    while (i < length) {
        int start = i;//记录每个单词的位置
        while (i < length && s[i] != ' ') {
            i++;//单词长度
        }
        for (int p = start; p < i; p++) {
            ret[p] = s[start + i - 1 - p];//逆序存放
        }
        while (i < length && s[i] == ' ') {
            ret[i] = ' ';//放入空格
            i++;
        }
    }
    return ret;
}

复杂度分析:
时间复杂度:遍历所有的字符,且均需反转,O(n);
空间复杂度:开辟与原数组大小相同的数组,因此辅助空间为O(n),空间复杂度为O(n)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Curious*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值