Leetcode: 翻转字符串里的单词

给你一个字符串 s ,请你反转字符串中 单词 的顺序。

单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。

注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。

思路:看一下示例,存在开头空格,中间空格,还有连续空格;我们可以提取字母(遍历判断字符串非空格)判别是否是一个单词(检测空格做断点),插入过程中存在两种情况,一种是单词中字母按照字母顺序输入(设置insert_pos,并且连续++),另外一种是单词结束,插入到最开头(insert函数,第一个参数是起始位置,默认是insert_pos = 0,第二个参数是重复个数,第三个参数为插入字符串)

!!!这其中插入空格,就需要判断res结果串不为空且insert_pos为0,随着单词首字母遍历的时候,先在开头插入空格,再插入单词逐个字母。

#include <iostream>
#include <string>

using namespace std;

class Solution {
public:
    string reverseWords(string s) {
        string res = "";
        int insert_pos = 0;
        for (int i = 0; i < s.size(); i++){
            if (s[i] == ' '){
                insert_pos = 0;
                continue;
            }
            else{
                if (res != "" && insert_pos == 0){
                    res.insert(insert_pos, 1, ' ');
                }
                res.insert(insert_pos, 1, s[i]);
                insert_pos++;
            }
        }
        return res;
    }
};

int main(){
    Solution s;
    string res = s.reverseWords("  the  sky is blue");
    cout << res << endl;
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值