您的位置:首页 > 其它

leetcode 151 —— Reverse Words in a String

2015-08-18 16:18 393 查看
Given an input string, reverse the string word by word.

For example,

Given s = "
the sky is blue
",

return "
blue is sky the
".

Update (2015-02-12):

For C programmers: Try to solve it in-place in O(1) space.

思路:

class Solution {
public:
void reverseWords(string &s) {
int left = 0;
while (left < s.size() && s[left] == ' ') {
s.erase(left, 1);
}
int right = s.size() - 1;
while (right >= 0 && s[right] == ' ') {
s.erase(right, 1);
right = s.size() - 1;
}
eraseMidEmp(s);
int n = s.size();
for (int i = 0; i < n / 2; i++) {
char tmp = s[i];
s[i] = s[n - 1 - i];
s[n - 1 - i] = tmp;
}
cout << s << endl;
int j = 0;
while (j < n) {
int cnt = 0;
while (j + cnt<n && s[j + cnt] != ' ') {
cnt++;
}
if (cnt > 1) {
reverseOneWord(s, j, j + cnt - 1);
j += cnt;
}
else {
j++;
}
}
}
void reverseOneWord(string &s, int start, int end) {
int n = (end - start + 1) / 2;
for (int i = 0; i < n; i++) {
char tmp = s[start + i];
s[start + i] = s[end - i];
s[end - i] = tmp;
}
}
void eraseMidEmp(string &s) {
int i = 0;
while (i + 1 < s.size()) {
if (s[i] == ' '&&s[i + 1] == ' ') {
s.erase(i, 1);
}
else
i++;
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: