Leetcode刷题笔记题解(C++):LCR 181. 字符串中的单词反转

思路:根据栈的原理先进后出,使用栈来依次保存每个单词,然后再依次从栈中取出每个单词

cpp 复制代码
class Solution {
public:
    string reverseMessage(string message) {
        int left = 0;
        int right = message.size()-1;
        //消除字符串前后多余的空格,比如字符串"  hello world!  "
        while(left<=right&&message[left]==' ') left++;
        while(right>=left&&message[right]==' ') right--;
        stack<string>sk;
        string str;//用于保存单个字符
        //从第一个单词开始压入栈中
        while(left<=right){
            //遇到空格并且前一个字符不是空格则判定之前的就为单个单词,str.size()>0用于判定之前的一个字符不为空格
            if(message[left]==' '&&str.size()>0){
                sk.push(str);
                str.clear();
            }
            //生成单词
            else if(message[left]!=' ') str+=message[left];
            left++;
        }
        //最后一个单词遇不到空格了,单独压入栈中
        sk.push(str);
        string ret;
        while(!sk.empty()){
            ret+=sk.top();//从上至下取出栈中每个单词
            ret+=" ";//每个单词之后添加空格
            sk.pop();//弹栈
        }
        ret.pop_back();//最后一个单词之后跟了一个空格,弹出空格
        return ret;
    }

};
相关推荐
张小姐的猫5 分钟前
【MySQL】数据类型
android·linux·数据库·c++·mysql·adb·php
讳疾忌医丶8 分钟前
编译器眼中的 C++ 循环:从指针别名、IEEE 754 结合律到 SIMD 语义证明
开发语言·c++
flytalei19 分钟前
逐浪笔记 GitOps 实战:Jenkins 构建、Argo CD 同步与 Git 回滚
笔记·git·jenkins
圣保罗的大教堂20 分钟前
leetcode 3863. 将一个字符串排序的最小操作次数 中等
leetcode
Tisfy29 分钟前
LeetCode 3863.将一个字符串排序的最小操作次数:分类讨论(一次遍历)——简单易懂版
算法·leetcode·字符串·题解·分类讨论
叼烟扛炮39 分钟前
Linux 学习笔记(八):GCC 编译器的四大阶段与链接原理
linux·笔记·学习
小徐不徐说1 小时前
C++ 机器视觉入门:从零搭建 AOI 开发环境(OpenCV + CMake)
开发语言·c++·opencv
Z21-X1 小时前
云原生运维学习笔记:从云计算概念到服务器硬件的入门之旅
运维·笔记·学习·云原生
0+1111 小时前
算法 --递归
算法·leetcode
滴啦嘟啦哒1 小时前
【具身笔记】【Piper+PI0.5】一、基于键盘实现数据采集
笔记·vla·具身