557. Reverse Words in a String III

我的未来我决定 提交于 2020-02-04 11:17:22

557. 反转字符串中的单词 III

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

示例 1:

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

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

解法一

//时间复杂度O(n), 空间复杂度O(1)
class Solution {
public:
    string reverseWords(string s) {
        int idx = 0, i, j;
        while(idx < s.size()) {
            i = idx;
            while(idx < s.size() && s[idx++] != ' ');
            if(idx < s.size()) j = idx - 2;
            else j = s.size() - 1;//idx到达右边界
            while(i < j) {
                char temp = s[i];
                s[i] = s[j];
                s[j] = temp;
                i++, j--;
            }
        }
        return s;
    }
};

思路: 双指针法,与题541类似。

  1. idx始终指向下一个单词的首字母;
  2. i、j所指的子串是要反转的单词,i初始化为idx。因为题上说没有多余的空格,所以可以用idx - 2来初始化j。注意处理idx到达右边界时的情况。
  3. idx每次向后移一个单词,直到遍历完成,返回s。
2019/05/31 21:18
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!