本文共 1125 字,大约阅读时间需要 3 分钟。
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
分析:
对一个字符串中得单词进行翻转,首先必须从字符串中分解出单词,然后将每个词压入堆栈,再依次弹出即可。
代码如下,运行时间约39ms:
class Solution {public:void reverseWords(string &s) { string result; int j = 0; stackstr_stack; const char* pHead = s.c_str(); bool wordStart = false; const char* pStr, *pBegin, *pEnd; for (pStr=pHead; *pStr!='\0'; pStr++) {
if (!isspace(*pStr) && wordStart==false)
{ wordStart = true; pBegin = pStr; continue; } if (isspace(*pStr) && wordStart == true) { wordStart = false; pEnd = pStr; str_stack.push(s.substr(pBegin-pHead, pEnd-pBegin)); } } if (wordStart == true) { wordStart = false; pEnd = pStr; str_stack.push(s.substr(pBegin-pHead, pEnd-pBegin)); } s.clear(); if (str_stack.size() > 0) { char space = ' '; while (!str_stack.empty()) { string stmp = str_stack.top(); str_stack.pop(); if (s.length() != 0) { s.push_back(space); } s = s + stmp; } } }};
转载地址:http://gyxti.baihongyu.com/