Question: Given an input string, reverse the string word by word. A word is defined as a sequence of non-space characters.
The input string does not contain leading or trailing spaces and the words are always separated by a single space.
For example,
Given s = "the sky is blue",
return "blue is sky the".
Could you do it in-place without allocating extra space?
Idea: Reverse twice, both in place.
The input string does not contain leading or trailing spaces and the words are always separated by a single space.
For example,
Given s = "the sky is blue",
return "blue is sky the".
Could you do it in-place without allocating extra space?
Idea: Reverse twice, both in place.
Time: O(n) Space: O(1)
class Solution {
public:
void reverseSub(string& s, int start,int end){
for(int i = start,j = end;i < j;i++,j--){
int c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void reverse(string& s)
{
//first reverse whole string
reverseSub(s,0,s.size() - 1);
//reverse word in string one by one
int start,end;
start = end = -1;
for(int i = 0;i < s.size();i++){
if(s[i] == ' ')continue;
if(i == 0 || s[i-1] == ' ')
start = i;
if((i+1) == s.size() || s[i+1]==' ')
end = i;
if(start >= 0 && end > start)
reverseSub(s,start,end);
}
}
}