I stumble upon this cool sorting algorithm with O(n)
time complexity on GeeksforGeeks - Sort string of characters and I was trying to refactor the code to use Java Streams
on the nested for loops instead and collect the result in a string variable but I can't seem to wrap my head around it.
Here's the original code:
// Java program to sort
// a string of characters
public class SortString{
static final int MAX_CHAR = 26;
// function to print string in sorted order
static void sortString(String str) {
// Hash array to keep count of characters.
int letters[] = new int[MAX_CHAR];
// Traverse string and increment
// count of characters
for (char x : str.toCharArray()) {
// 'a'-'a' will be 0, 'b'-'a' will be 1,
// so for location of character in count
// array we will do str[i]-'a'.
letters[x - 'a']++;
}
// HOW TO CONVERT THIS TO JAVA STREAM?
// Traverse the hash array and print
// characters
for (int i = 0; i < MAX_CHAR; i++) {
for (int j = 0; j < letters[i]; j++) {
System.out.print((char) (i + 'a'));
}
}
}
// Driver program to test above function
public static void main(String[] args) {
sortString("geeksforgeeks");
}
}
// This code is contributed
// by Sinuhe