2017-10-13 68 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]