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 <= 105s[i]is an English letter (uppercase or lowercase), digit, or space' '.There is at least one word in
s.sdoes not contain leading or trailing spaces.All the words in
sare 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?