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;
stack<string> str_stack;
const char* pHead = s.c_str();
bool wordStart = false;
const char* pStr, *pBegin, *pEnd;
for (pStr=pHead; *pStr!='\0'; pStr++)
{
<span style="white-space: pre;"> </span>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;
}
}
}
};