151. 颠倒字符串中的单词

✔做题思路 or 感想 :

  1. 乍一看很猛,其实思路就仨

    1. 把整个字符串反转
    2. 删除多余空格
    3. 然后再把每一个单词反转
  2. 反转,删除空格用的都是双指针法,太香了

  3. 数组中的删除操作总体思想虽然是把符合条件的数往前面推,但这个"推"并不是交换值!而是直接往前面把不符合条件的值直接替换了!!!

    class Solution {
    public:
        string reverseWords(string s) {
            reverse(s.begin(), s.end());
            int fast = 0, slow = 0;
            while (s[fast] == ' ' && fast < s.size()) {	//这里是先要删除前面的空格
                fast++;
            }
            for (; fast < s.size(); fast++) {	//去除中间空格
                if (fast > 1 && s[fast - 1] == s[fast] && s[fast] == ' ')continue;
                else {	//注意这里的删除操作,不是用swap替换!而是直接就把后面符合条件的直接替换前面不符合条件的数!!!!
                    s[slow] = s[fast];
                    slow++;
                }
            }
            //下面是为了处理后面末尾的空格
            if (slow > 0 && s[slow - 1] == ' ')s.resize(slow - 1);
            else s.resize(slow);
    		//下面是对每一个单词的反转
            fast = 0, slow = 0;
            for (; fast < s.size(); fast++) {
                if (fast == s.size() - 1) {
                    reverse(s.begin() + slow, s.end());
                }
                else if (s[fast + 1] == ' ') {
                    reverse(s.begin() + slow, s.begin() + fast + 1);
                    slow = fast + 2;	//slow找下一个单词的起点
                    fast++;
                }
            }
            return s;
        }
    };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值