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;
    }

};
相关推荐
mmz120721 小时前
深度优先搜索DFS2(c++)
c++·算法·深度优先
6Hzlia21 小时前
【Hot 100 刷题计划】 LeetCode 169. 多数元素 | C++ 哈希表基础解法
c++·leetcode·散列表
米粒121 小时前
力扣算法刷题 Day 38 (打家劫舍专题)
算法·leetcode·职场和发展
暴力求解21 小时前
C++ ---string类(三)
开发语言·c++
智者知已应修善业21 小时前
【CD4022八进制计数器脉冲分配器】2023-5-31
驱动开发·经验分享·笔记·硬件架构·硬件工程
say_fall21 小时前
有关算法的简单数学问题
数据结构·c++·算法·职场和发展·蓝桥杯
青葱味奶糖21 小时前
管理学之深度管理21法则--笔记2
笔记·深度管理·陈浩老师
m0_7167652321 小时前
数据结构--顺序表的插入、删除、查找详解
c语言·开发语言·数据结构·c++·学习·算法·visual studio
say_fall21 小时前
滑动窗口算法
数据结构·c++·算法
落羽的落羽1 天前
【算法札记】练习 | Week1
linux·服务器·c++·人工智能·python·算法·机器学习