For C programmers: Try to solve it in-place in O(1) space.
看到这句话,那就在原位置上上替换好啦。
class Solution {
public:
void reverseWords(string &s)
{
if (s.empty())
{
return;
}
for (int i = 0; i < s.size() - 1; ++i)
{
if (s[i] == ' ' && s[i + 1] == ' ')
{
s.erase(s.begin() + i + 1);
--i;
}
}
if (!s.empty() && s.front() == ' ')
{
s.erase(s.begin());
}
if (!s.empty() && s.back() == ' ')
{
s.erase(s.end() - 1);
}
if (s.empty())
{
return;
}
reverse(s.begin(), s.end());
int posRec = 0;
for (int i = 0; i < s.size(); i = posRec)
{
int j = i;
while (j < s.size() && s[j] != ' ')
{
++j;
}
posRec = j + 1;
--j;
while (i < j)
{
swap(s[i++], s[j--]);
}
}
}
};
第一次提交时候,第一个判空条件没有写,报错。
因为s.size() - 1 != -1,而是4294967295