151. 翻转字符串里的单词
链接力扣LeetCode官网 - 全球极客挚爱的技术成长平台题解先处理两边的空格整体字符串翻转单个单词翻转处理单词间字符串class Solution { public: void reverse(string* s, int l, int r) { while (l r) { char temp (*s)[l]; (*s)[l] (*s)[r]; (*s)[r] temp; l; --r; } } string reverseWords(string s) { int left 0; int right s.size()-1; for (left; left s.size(); left) { if (s[left] ! ) { cout left endl; break; } } for (right; right 0; --right) { if (s[right] ! ) { cout right endl; break; } } reverse(s, left, right); cout s endl; int begin left; int end left; while (begin right) { while (begin right s[begin] ) begin; end begin; while (end right s[end] ! ) end; reverse(s, begin, end-1); begin end; } int count 0; for (int i left; i right; i) { if (s[i] i1 right s[i1] ) { continue; } s[count] s[i]; } return s.substr(0, count); } };class Solution { public: string reverseWords(string s) { int left 0; int right s.size()-1; while (left right) { swap(s[left], s[right]); left; --right; } int i 0; for (; i s.size(); i) { if (s[i] ! ) { break; } } int tail 0; for (; i s.size();) { int begin i; while (i s.size() s[i] ! ) { i; } int end i-1; int left begin; int right end; while (left right) { swap(s[left], s[right]); left; --right; } for (;begin end; begin) { s[tail] s[begin]; } s[tail] ; while (i s.size() s[i] ) { i; } } return s.substr(0, tail-1); } };class Solution { public: string reverseWords(string s) { if (s.size() 0) { return ; } int left 0; int right 0; std::string result; for (; left s.size();) { while (s[left] left s.size()) { left; } right left; while (s[right] ! right s.size()) { right; } if (left right) { break; } result s.substr(left, right-left) result; left right1; } result.pop_back(); return result; } };class Solution { public: string reverseWords(string s) { if (s.size() 0) { return s; } reverse(s.begin(), s.end()); int idx 0; for (int i 0; i s.size();) { int left i; while (left s.size() s[left] ) { left; } if (left s.size()) { break; } int right left; while (right s.size() s[right] ! ) { right; } //cout left right endl; reverse(s.begin()left, s.begin()right); for (int k left; k right-1; k) { s[idx] s[k]; //cout s[idx] char: endl; idx; } while (right s.size() s[right] ) { right; } if (right s.size()) { s[idx] ; idx; } i right; } return s.substr(0, idx); } };