Keshawn_lu's Blog

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

字数统计: 289阅读时长: 1 min
2020/08/30 Share

题目简介:

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

示例:

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

提示:

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

思路:

每次找空格的位置,从而可以找到每个单词左右的位置,然后将其翻转过来。

需要注意的是最后还需要翻转一次(最后一个单词)。

tip:

  • reverse()函数需要注意循环中的s[i + left],并且i0开始,非left

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution {
public:

void reverse(string& s, int left, int right){

int len = right - left + 1;

for(int i = 0; i < len / 2; i++){

char temp = s[i + left];
s[i + left] = s[right - i - 1];
s[right - i - 1] = temp;
}
}

string reverseWords(string s) {

int left = 0;
int right = 0;

for(int i = 0; i < s.size(); i++){

if(s[i] == ' '){

right = i; //这个单词的右边
reverse(s, left, right);
left = i + 1; //下个单词的左边
}
}

reverse(s, left, s.size());

return s;
}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: