I'd like to know if there's some faster way to sort such array than quicksort/mergesort.
Maximum array's length is 10^6. Word's length is >=10 and <= 100 and the word can contain a-z and spaces (27 different characters in total). Characters are not unique in the words (they can repeat). All the words in an array are equally long.
You can put all the words in a trie (or a radix tree), and then print it in a DFS order, starting from the "smaller" lexicographical letter at each level in the DFS.
This solution will be O(n* |S|)
where |S|
is the average string length.
Simple example:
Let the set of strings be [ac,ab,aca]
:
The resulting trie will be:
a
/ \
/ \
b c
| / \
$ $ a
|
$
And a DFS (which prefers lexicographically smaller characters): The DFS will start from a
, go to b
, and then to the end sign ($
) and will first print ab
, then go back to a
, and right to c
, and to the next $
sign, and will print ac
, and next to a
and its $
and will print aca
, resulting in printing:
ab
ac
aca
As expexted.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With