Reverse Words in a String leetcode

本文介绍了一种在C语言中不使用额外空间实现字符串按单词逆序的方法。通过前后逆置每个单词的字母,再逆置整个字符串,最终达到逆序效果。文章还讨论了如何在逆序过程中处理多余空格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given an input string, reverse the string word by word.

For example,
Given s = "the sky is blue",
return "blue is sky the".


For C programmers: Try to solve it in-place in O(1) space.

Clarification:
  • What constitutes a word?
    A sequence of non-space characters constitutes a word.
  • Could the input string contain leading or trailing spaces?
    Yes. However, your reversed string should not contain leading or trailing spaces.
  • How about multiple spaces between two words?
    Reduce them to a single space in the reversed string.

 

这个题如果用C++的stringstream字符串流来实现的话,会非常简单
void reverseWords(string &s) {
    istringstream is(s);
    string tmp;
    is >> s;
    while(is >> tmp) s = tmp + " " + s;
    if(s[0] == ' ') s = "";
}

但是,题目中对于C语言实现有更严格的要求,需要就地操作

联想到之前碰到的题目,数组旋转问题,我们是否可以用类似的思路来解决呢

对于每一个单词,都将其字母前后逆置,然后再将整个字符串逆置,这样就可以得到正确反转结果了。

但是如何处理多余的空格呢?我们可以在遍历的同时,利用快慢双指针来将空格省略掉。然后再执行逆置操作。

代码如下:

void reverseWords(string &s) {

    int i = 0, j = 0;
    int l = 0;
    int len = s.length();
    int wordcount = 0;

    while (true) {
        while (i<len && s[i] == ' ') i++;
        if (i == len) break;
        if (wordcount) s[j++] = ' ';
        l = j;
        while (i<len && s[i] != ' ') { s[j] = s[i]; j++; i++; }
        reverseword(s, l, j - 1);
        wordcount++;
    }
s.resize(j);
reverseword(s, 0, j - 1); }

 

 

 

转载于:https://www.cnblogs.com/sdlwlxf/p/5152364.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值