151. Reverse Words in a String
Intuition
We are given a string that may contain leading, trailing, or multiple intermediate spaces. We need to reverse the order of words, not the characters, and return a well-formatted string where:
Words are in reverse order.
Words are separated by a single space.
No leading or trailing spaces are allowed.
So
Trim the input string to remove leading and trailing whitespace.
Split the string into words based on space.
Reverse the array of words.
Use a StringBuilder to join words together with a single space, skipping empty strings caused by multiple spaces.
Complexity
Space Complexity
Time Complexity
Code
public String reverseWords(String input) {
// Step 1: Trim input to remove leading/trailing spaces and split by space
String[] words = input.trim().split(" ");
// Step 2: Reverse the array of words
for (int left = 0, right = words.length - 1; left < right; left++, right--) {
String temp = words[left];
words[left] = words[right];
words[right] = temp;
}
// Step 3: Build the final string, skipping extra spaces (i.e., empty strings)
StringBuilder reversedSentence = new StringBuilder();
for (int i = 0; i < words.length; ++i) {
if (words[i].isEmpty()) continue; // Skip empty strings from multiple spaces
if (reversedSentence.length() != 0) reversedSentence.append(" ");
reversedSentence.append(words[i]);
}
return reversedSentence.toString(); // Return the cleaned, reversed sentence
}
Last updated