Problem:
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.
Solution:
class Solution {
public:
string reverseWords(string s) {
reverse(s.begin(), s.end()); // s = "tsetnoc edoCteeL ekat s'teL"
int lastspace = findLastSpaceIndex(s); // 定位最后一个空格的下标
if (lastspace == -1) return s; // 若不存在空格,则直接返回reverse后的串
string res = "";
while (s.length() > 0) {
res += s.substr(lastspace + 1); // 添加最后一个空格后的所有字符 s'teL
res += " "; // 追加空格
s = s.substr(0, lastspace); // 去掉已经添加的部分 s = "tsetnoc edoCteeL ekat"
lastspace = findLastSpaceIndex(s);
if (lastspace == -1) break;
}
res += s;
return res;
}
// 定位最后一个空格的下标,不存在返回-1
int findLastSpaceIndex(string s) {
int index = -1;
for (int i = 0; i < s.length(); i++) {
if (s[i] == ' ')
index = i;
}
return index;
}
};