题目简介:
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例:
1 2
| 输入:"Let's take LeetCode contest" 输出:"s'teL ekat edoCteeL tsetnoc"
|
提示:
- 在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
思路:
每次找空格的位置,从而可以找到每个单词左右的位置,然后将其翻转过来。
需要注意的是最后还需要翻转一次(最后一个单词)。
tip:
reverse()
函数需要注意循环中的s[i + left]
,并且i
从0
开始,非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; } };
|