擅长:python、mysql、java
<p>因为字母表总是固定的26个字符,
这将在O(N)中工作,并且只需要26的常量空间</p>
<pre><code>from collections import Counter
from string import ascii_lowercase
def sorted_alphabet(text):
freq = Counter(text)
alphabet = filter(freq.get, ascii_lowercase) # alphabet filtered with freq >= 1
top_freq = max(freq.values()) if text else 0 # handle empty text eg. ''
for top_freq in range(top_freq, 0, -1): # from top_freq to 1
for letter in alphabet:
if freq[letter] >= top_freq:
yield letter
print ''.join(sorted_alphabet('abbcccdddd'))
print ''.join(sorted_alphabet('dbdd'))
print ''.join(sorted_alphabet(''))
print ''.join(sorted_alphabet('xxxxaaax'))
</code></pre>
<hr/>
<pre><code>dcdbcdabcd
ddbd
xxaxaxax
</code></pre>