0186. Reverse Words in a String II
https://leetcode.com/problems/reverse-words-in-a-string-ii
Description
Given a character array s
, reverse the order of the words.
A word is defined as a sequence of non-space characters. The words in s
will be separated by a single space.
Your code must solve the problem in-place, i.e. without allocating extra space.
Example 1:
**Input:** s = ["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"]
Example 2:
**Input:** s = ["a"]
**Output:** ["a"]
Constraints:
1 <= s.length <= 105
s[i]
is an English letter (uppercase or lowercase), digit, or space' '
.There is at least one word in
s
.s
does not contain leading or trailing spaces.All the words in
s
are guaranteed to be separated by a single space.
ac
class Solution {
public void reverseWords(char[] str) {
// corner cases
if (str.length < 2) return;
// reverse whole sentence
reverse(str, 0, str.length-1);
// reverse single word, for loop, finally check i to reverse last word
for (int i = 0, j = 0; i < str.length; i++) {
if (i+1 == str.length || str[i+1] == ' ') {
reverse(str, j, i);
i++;
j = i + 1;
}
}
}
private void reverse(char[] str, int start, int end) {
int s = start, e = end;
while (s < e) {
char tmp = str[s];
str[s] = str[e];
str[e] = tmp;
s++;
e--;
}
}
}
Last updated
Was this helpful?