L186. Reverse Words in a String II
Problem:
Given an input string , reverse the string word by word.
Example:
Input: ["t","h","e"," ","s","k","y"," ","i","s"," ","b","l","u","e"]
Output: ["b","l","u","e"," ","i","s"," ","s","k","y"," ","t","h","e"]
Note:
A word is defined as a sequence of non-space characters.
The input string does not contain leading or trailing spaces.
The words are always separated by a single space.
Follow up: Could you do it in-place without allocating extra space?
Solution:
public void reverseWords(char[] s) {
if(s == null) return;
// reverse whole sentence
reverse(s, 0, s.length - 1);
// reverse word
int start = 0;
for(int i = 0; i < s.length; i++){
if(s[i] == ' '){
reverse(s, start, i -1);
start = i + 1;
}
}
// reverse the last word, if where is only one word, this gonna solve the corner case
reverse(s, start,s.length - 1);
}
public void reverse(char[] s, int start, int end){
if(s == null || start >= end) return;
while(start < end){
char temp = s[start];
s[start] = s[end];
s[end] = temp;
start++;
end--;
}
}
Last updated
Was this helpful?