leetcode151. 颠倒字符串中的单词(思路+详解)

一:题目

在这里插入图片描述

二:上码



class Solution {
public:
    /**
        思路:
            1.去空格(字符串首部的空格  字符串中间的空格  字符串尾部的空格)
                1>:这里的话 我们就用到了双指针去空格 fastindex遇见空格直接跳过
                    当fastindex遇不见空格,就将值赋值给fastindex;

            2.字符串反转
            3.将单词反转
    */
    void removespacing(string& s) {//记得加上取地址符,否则的话,我们无法得到正确的字符串
        int slowIndex = 0;
        int fastIndex = 0;

        //处理字符串前的空格
        while (s[fastIndex] == ' ') fastIndex++;

        //处理字符串中的空格  不过这里需要注意的是  我们需要保留一个正常的空格
        for (; fastIndex < s.size(); fastIndex++) {
            
            if ( fastIndex > 0
                && s[fastIndex] == s[fastIndex-1]//这里的处理就是可以保留正常的空格 
                && s[fastIndex] == ' ') {
                    continue;
            } else {
                s[slowIndex] = s[fastIndex];
                slowIndex++;
            } 
        }
        //处理字符串末尾的空格 如果字符串末尾有多个空格的话 上方的for循环可以将空格数处理到只剩下一个
        //slowIndex最终的值是我们的元素个数
        if (slowIndex > 0 && s[slowIndex-1] == ' ') {
            s.resize(slowIndex-1);//重新设置字符串大小
        } else {
            s.resize(slowIndex);
        }
    }

    //反转单词  
    void reverseStr(string& s,int start,int end) {
        for (int i = start,j = end; i < j; i++,j--) {
            swap(s[i],s[j]);
        }
    }

    string reverseWords(string s) {
        
        //消除空格
        removespacing(s);
        //反转字符串
        reverseStr(s,0,s.size()-1);

        //反转字符串中的单个单词
        for (int i = 0; i < s.size(); i++) {
            
            int j = i;

            while (j < s.size() && s[j] != ' ') {
                j++;
            }
            //然后遇见了空格的话  那么我们的i是保留的是我们单词的首个下标  j-1就是我们的单词的尾部下标

            reverseStr(s,i,j-1);
            //此时j代表的是空格,那么的话赋值给i,i再++的话就是正常字符了
            i = j;
        }

        // cout << s;
        return s;
    }
};

不要自我感动
沉浸于自我感动无异于扼杀自己的梦想
永远不要骗自己
时常要问自己
自己有什么 想要什么 可以为此放弃什么
谁活的都不容易
不用去羡慕
心中有了向往的样子
就努力靠近
无论接下来走那条路
只要我们在路上
那就跟我们向往的样子越来越近
考研也好
就业也罢
无论那条路
都将不会一帆风顺
前行路上
能有鼓励更好
有质疑也无所谓
因为我们选的路
是我们自己走的
别人左右不了什么
要向着光
要不断提升自己
要热爱和乐观
可以迷茫
可以焦虑
但不要停下
只要在路上
方向就一点点有了
希望是这个世界上最美好的事情
加油 陌生人 !!我们永远在路上
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天天向上的菜鸡杰!!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值