QUESTION
easy
题目描述
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"
说明
在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
SOLUTION
由于题目中指出了,不会有多余的空格,这道题倒变得不难
方法一
原地翻转。需要在 s 后面加一个空格或者通过其他方式,否则最后一个单词无法翻转
class Solution {
public:
string reverseWords(string s) {
s.push_back(' ');
int len = s.length(), l = 0;
for(int i = 0; i < len; i++){
if(s[i] == ' ') {
int r = i - 1;
while(l < r){
char tmp = s[l]; //swap([l], s[r])
s[l] = s[r];
s[r] = tmp;
l++; r--;
}
l = i + 1;
}
}
s.pop_back();
return s;
}
};
方法二
通过 istringstream
分割出单词
class Solution {
public:
string reverseWords(string s) {
string res = "", tmp = "";
istringstream is(s);
while(is >> tmp) {
reverse(tmp.begin(), tmp.end());
res += tmp + " ";
}
res.pop_back();
return res;
}
};