Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue",
return "blue is sky the".
Clarification:
Round 2:
- What constitutes a word?
A sequence of non-space characters constitutes a word. - Could the input string contain leading or trailing spaces?
Yes. However, your reversed string should not contain leading or trailing spaces. - How about multiple spaces between two words?
- Reduce them to a single space in the reversed string.
class Solution {
public:
void reverseWords(string &s) {
string result;
string tmp = "";
for(int i = 0; i < s.length(); i++)
{
if(s[i] != ' ')
tmp += s[i];
else if(s[i] == ' ')
{
if(tmp.length() != 0)
{
if(result.length() != 0)
result.insert(0, " ");
result.insert(0, tmp);
tmp = "";
}
}
}
if(tmp.length() != 0)
{
if(result.length() != 0)
result.insert(0, " ");
result.insert(0, tmp);
}
s = result;
}
};
Round 2:
class Solution {
public:
void reverseWords(string &s) {
int end = -1;
string result = "";
for(int i = s.size()-1; i >= 0; i--)
{
if(s[i] == ' ')
{
if(end != -1)
{
result += s.substr(i+1, end-i);
result += " ";
end = -1;
}
}
else
{
if(end == -1)
end = i;
}
}
if(end != -1)
{
result += s.substr(0, end+1);
}
if(result[result.size()-1] == ' ')
result = result.substr(0, result.size()-1);
s = result;
}
};
Round 3:
class Solution {
public:
void reverseWords(string &s) {
int r = -1;
string result;
for(int i = s.size()-1; i >= 0; i--)
{
if(' ' != s[i] && -1 == r)
{
r = i;
continue;
}
if(' ' == s[i] && -1 != r)
{
result += s.substr(i+1, r-i);
result += " ";
r = -1;
}
}
if(-1 != r)
{
result += s.substr(0, r+1);
}
else
result = result.substr(0, result.size()-1);
s = result;
}
};
反转字符串中的单词
本文介绍了一种算法,用于反转字符串中的单词顺序,并去除多余的空格。通过三种不同的实现方式展示了如何高效地完成这一任务。
429

被折叠的 条评论
为什么被折叠?



