1.问题描述
Given a string, you need to reverse the order of characters in each word within a sentence while still preserving whitespace and initial word order.
Example 1:
Input: “Let’s take LeetCode contest”
Output: “s’teL ekat edoCteeL tsetnoc”
Note: In the string, each word is separated by single space and there will not be any extra space in the string.
来自 https://leetcode.com/problems/reverse-words-in-a-string-iii/description/
2.题目分析
给定一个字符串,反转每个单词中的字符顺序,同时仍然保留空格和单词原来的顺序。简单的方法就是使用left和right,left指向要反转的单词的第一个字母,right指向单词最后一个字母后的空格,然后进行反转,再更新left和right进行下一个单词的反转。
3.C++代码
//我的代码:(beats 98%)
void reverseSubStr(string &s, int l, int r)
{ //反转s[l..r]
char tmp;
while (l <r)
{
tmp = s[r];
s[r] = s[l];
s[l] = tmp;
l++; r--;
}
}
string reverseWords(string &s)
{
int L = s.length();
int left = 0;
int right = 0;
while (right < L)
{
if (s[right] != ' ')
{
right++;
if (right != L)
continue;
}
reverseSubStr(s, left, right-1);
left = right + 1;
right ++;
}
return s;
}