前言

近期准备把力扣leetcode算法题刷一遍,算是一个Flag吗?几千道题啊啊啊啊啊。。。。。。我是不是膨胀了?

把我的C++解决方案记录在这里,与大家分享。

题目描述

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例 1:

输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc" 

注意: 在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

C++代码实现

class Solution {
public:
    string reverseWords(string s) {
        size_t left = 0;  //单词起点
        size_t right; //单词终点
        
        size_t len = s.size();
        size_t pos = 0;
        char tem;
        
        if(0 != len){
            while(pos <= len){
                if(' ' == s[pos]){
                    right = pos - 1;
                    for(;left < right; left++, right--){
                        tem = s[left];
                        s[left] = s[right];
                        s[right] = tem;
                    }
                    left = pos + 1;
                }else if('\0' == s[pos]){
                    right = pos - 1;
                    for(;left < right; left++, right--){
                        tem = s[left];
                        s[left] = s[right];
                        s[right] = tem;
                    }
                }
                pos++;
            }  
        }
        
        return s;
    }
};

代码性能

第一次提交没有注意到空输入"",大家注意一下就好。