leetcode 151 —— Reverse Words in a String

来源:互联网 发布:win7 64位数据库下载 编辑:程序博客网 时间:2024/05/29 15:08

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);}elsei++;}}};


0 0
原创粉丝点击