In this article, you will learn to resolve the Reverse Words in a String problem by using Iterative algorithms
Problem
Given a string
s
Write an algorithm to reverse words in
s
Redundant spaces should be trimmed
Example 1
Input: "Hello Koding"
Output: "Koding Hello"
Example 2
Input: " Live on time, emit no evil "
Output: "evil no emit time, on Live"
Approach 1: Splitting and Iterative
Split the given string by space character into a words array
Iterate the words array in reverse to build the result string
public class ReverseWordsBySplittingAndIterative {
static String reverseWords(String s) {
StringBuilder result = new StringBuilder();
String[] words = s.split(" ");
for (int i = words.length - 1; i >= 0; i--) {
if (!words[i].isEmpty()) {
result.append(words[i]).append(" ");
}
}
return result.toString().trim();
}
public static void main(String[] args) {
System.out.println(reverseWords("Hello Koding"));
System.out.println(reverseWords(" Live on time, emit no evil "));
}
}
- Output
Koding Hello
evil no emit time, on Live
Time complexity: O(n) as iterating over an array of size n
Space complexity: O(n) as an array of size n is used
Approach 2: Iterative
- Iterate the words array in reverse to build the result string
static String reverseWords(String s) {
StringBuilder result = new StringBuilder();
int j = s.length();
for (int i = j-1; i >= 0; i--) {
char c = s.charAt(i);
if(Character.isWhitespace(c) || i==0) {
result.append(s, i, j);
j = i;
}
}
return result.toString().trim();
}
public static void main(String[] args) {
System.out.println(reverseWords("Hello Koding"));
System.out.println(reverseWords(" Live on time, emit no evil "));
}
}
- Output
Koding Hello
evil no emit time, on Live
Time complexity: O(n) as iterating over an array of size n
Space complexity: O(n) as a string of size n is used