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

文章目录

  • 1. 题目描述
  • 2. 解题思路
  • 3. 代码实现


1. 题目描述

题目链接:557. 反转字符串中的单词 III

LeetCode 557. 反转字符串中的单词 III_第1张图片

2. 解题思路

此题也可以直接在原字符串上进行操作,避免额外的空间开销。

当找到一个单词的时候,我们交换字符串第一个字符与倒数第一个字符,随后交换第二个字符与倒数第二个字符……如此反复,就可以在原空间上翻转单词。

我们让 i 指向起始位置,当 i 不为空格时,就往后挪动,遇到空格就停下来,此时 i 指向空格

LeetCode 557. 反转字符串中的单词 III_第2张图片

此时我们交换反转第一个单词 Let's 的顺序

LeetCode 557. 反转字符串中的单词 III_第3张图片

此时 i 还是指向空格的,所以我们需要再把 i 往后移动,让它指向下一个单词

LeetCode 557. 反转字符串中的单词 III_第4张图片

这样,我们就完成了对一个单词的反转,我们用个 while 循环完成对整个句子里面单词的反转,而循环结束的条件就是 i < s.length()

3. 代码实现

代码示例

class Solution {
public:
    string reverseWords(string s) {
        int len = s.length();
        int i = 0;
        while (i < len) {
            int start = i;
            // 1.找到第一个单词,遇到空格就停止
            while (i < len && s[i] != ' ') {
                i++;
            }
            
            // 2.反转单词的顺序
            int left = start;
            int right = i - 1;
            while (left < right) {
                swap(s[left], s[right]);
                left++;
                right--;
            }

            // 3.此时i还是指向空格的,所以继续让i++,指向下一个单词
            while (i < len && s[i] == ' ') {
                i++;
            }
        }
        return s;
    }
};

你可能感兴趣的:(「题解」,leetcode,算法,c++)