【LeetCode】Reverse Words in a String

题目地址:https://oj.leetcode.com/problems/reverse-words-in-a-string/

描述:

        给定一个字符串S, 以单词为单位逆序输出,如输入:"the sky is blue",则输出“blue is sky the".

        单词的定义:连续的非空白字符序列。

        输入字符可以以空白字符开头和结尾。

        如果单词之前存在多个空白字符,逆序输出时只输出一个空白字符  。


思路:

        从头到尾扫描字符串中的每个字符,将连续非空白字符合并为一个单词word,遇到空白字符认为上一单词结束,将其入栈。扫描完后单词依次出栈组成新的逆序字符串。


C++代码:

void reverseWords(string &s)
{
    stack<string> stk;

    if (s.size() == 0) return;

    string::size_type size = s.size();
    string word;
    for (string::size_type i = 0; i < size; ++i) {
        if (isblank(s[i])) {  // 遇到空格则将空格之前的单词入栈
            if (word.size()) {
                stk.push(word);
                word.clear();
            }
        } else {
            word.push_back(s[i]);
        }
    }

    // 如果字符串s不是以空格结尾,将最后一个word入栈
    if (!isblank(s[s.size()-1])) {
        stk.push(word);
    }

    s = "";
    while(!stk.empty()) {
        s += stk.top();
        stk.pop();
        s += " ";
    }
    // 删除末尾空格
    if (s.size()) { s.erase(s.size()-1); }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值