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.
思路:将字符串通过空格分成各个单词,然后依次反转
class Solution {
public:
string reverseWords(string s) {
if (s.length() == 0) return s;
int begin = 0, end = 0;
while (end < s.length() - 1) {
int i = begin;
for (; i < s.length(); ++i)
if (s[i] == ' ' || i == s.length() - 1)
break;
if (i == s.length() - 1)
end = i;
else end = i - 1;
s = reverse(s, begin, end);
begin = i + 1;
}
return s;
}
string reverse(string s, int begin, int end) {
char temp;
for (int i = begin; i <= (end + begin) / 2; ++i) {
temp = s[i];
s[i] = s[end + begin - i];
s[end + begin - i] = temp;
}
return s;
}
};
下面是leetcode上看到的一个答案,代码很清晰
class Solution {
public:
string reverseWords(string s) {
for (int i = 0; i < s.length(); i++) {
if (s[i] != ' ') {
int j = i;
for (; j < s.length() && s[j] != ' '; j++) { }
reverse(s.begin() + i, s.begin() + j);
i = j - 1;
}
}
return s;
}
};