2017-10-13 66 views
-2

我有个字符的字符串字符排序

abcdefghijklmnopqrstuvwxyz_

我想利用这个字符串和次数,他们出现在字符的大块进行排序。例如:

cwrxwzbgickpjbp_svnudntddwdqbfgzyiqpuxddmpvyfquosmicfzkjekxzchngpqaksafulateukuwomdrwza_n_ptzktjzcuibnebe_tqessrzqewgkadrkvtyznaupodanwazopg_fijcoojojbsolr_ejesukzc_quochdnmti_lkvrsegyieqlqysuxdvetkqtkhxaiypfdiddztlicjurnllriopdtuuzpryrsepfydyeg_xkr_ruxp_lgqesysidfsygztwrba_ay_gaqqklbrvr_lbhawjraqujfxptmuvqfzklfodgaqrnhjravksjwemoosdlxtvw_qspxmlvqryusfixzlkb_p_c_tepzozzwnokvqspkizygoqpbhjnsxopchzgapctowbrletrunlgnvzpfwrqgedo_s_ygkxz_mpncnve_gfpbotupawevhfxvqhwlerupjfibosbvhiijrodigzyhy_iijes_xsqorshhdzkjqitpljsftpitjetwmzqiabyiewgtbjaddtsjkckcxxvlyrchloetluxkohn_uihkdjpcqgvejanslakmwendgkmvmayknvjjnr_kdapnumwvz__lsimxdtrflyleykxejl_jbkhexpcyreoapelqzzyriyrbxdgbgwrrxlj_pt_mpwubvbveakxfsbfgj___

我也想放弃任何字符后包括下划线,一旦我有这些分类。

递归正确的想法,我需要看看这里?

afiskjweocnsdkspwjrhfg

基本上字符将简单地基于其在一个单一的线路频率来排序:

EDIT的什么可以被输出

实施例。

+1

递归解决方案并没有真正映入脑海,没有。 – kindall

+0

这将有助于看到你期望得到的结果是什么输入 –

回答

1
<?php 

$text = 'ahugechunkofatext'; 
$charCounts = count_chars($text, 1); 
arsort($charCounts); 

$chars = array_map('chr', array_keys($charCounts)); 
$chars = array_filter($chars, function ($char) { 
    return !in_array($char, ['_']); // A list of chars that you don't want 
}); 

echo implode('', $chars) . PHP_EOL; 
0

你可以使用collections.Counter算在大字符串中的字符:

import collections 
walloftext = """cwrxwzbgickpjbp_svnudntddwdqbfgzyiqpuxddmpvyfquosmicfzkjekxzchngpqaksafulateukuwomdrwza_n_ptzktjzcuibnebe_tqessrzqewgkadrkvtyznaupodanwazopg_fijcoojojbsolr_ejesukzc_quochdnmti_lkvrsegyieqlqysuxdvetkqtkhxaiypfdiddztlicjurnllriopdtuuzpryrsepfydyeg_xkr_ruxp_lgqesysidfsygztwrba_ay_gaqqklbrvr_lbhawjraqujfxptmuvqfzklfodgaqrnhjravksjwemoosdlxtvw_qspxmlvqryusfixzlkb_p_c_tepzozzwnokvqspkizygoqpbhjnsxopchzgapctowbrletrunlgnvzpfwrqgedo_s_ygkxz_mpncnve_gfpbotupawevhfxvqhwlerupjfibosbvhiijrodigzyhy_iijes_xsqorshhdzkjqitpljsftpitjetwmzqiabyiewgtbjaddtsjkckcxxvlyrchloetluxkohn_uihkdjpcqgvejanslakmwendgkmvmayknvjjnr_kdapnumwvz__lsimxdtrflyleykxejl_jbkhexpcyreoapelqzzyriyrbxdgbgwrrxlj_pt_mpwubvbveakxfsbfgj___""" 
wallcount = collections.Counter(walloftext) 

然后使用这些计数到原来的字母排序:

alphabet = "abcdefghijklmnopqrstuvwxyz_" 
sortedalph = sorted(alphabet, key=lambda c: wallcount[c]) 

(此排序可通过提高频率:结果如果你想反其道而行,请在wallcount之前投入-。)

最后,参加排序的字母回字符串后它砍掉下划线和一切:

finalalph = "".join(sortedalph).split("_")[0]