如果对字符串进行排序,通常会得到类似以下内容的信息:
':Iaaceeefggghiiiiklllllmnnooooprrssstttttuuyyyy
是的,那是第一句话。
正如你所看到的,有很多重复的字符,aa
,eee
,ttttt
,9位等。
如果我们将128
第一个重复项的ASCII值相加,256
将第二个重复项的ASCII值相加384
,依此类推,依此类推,再次对其进行排序并输出新的字符串(取模128以返回相同的字符),我们将得到以下字符串:
':Iacefghiklmnoprstuy aegilnorstuy egilosty iloty lt
(请注意单个前导空格和四个尾随空格)。
该字符串“依次排序” <space>':I....uy
,<space>aeg....uy
,<space>egi....ty
,<space>iloty
,<space>lt
,<space>
,<space>
,<space>
,<space>
。
如果我们使用带数字的字符串,可能会更容易形象化。该字符串111222334
在“排序”后将为:123412312
。
挑战:
毫不奇怪,挑战在于编写根据以上描述对字符串进行排序的代码。
您可以假定输入字符串将仅包含32-126(空格到波浪号)范围内的可打印ASCII字符。
测试用例:
**Test cases:**
*:Tacest*es*s*
If you sort a string you'll typically get something like:
':Iacefghiklmnoprstuy aegilnorstuy egilosty iloty lt
Hello, World!
!,HWdelorlol
#MATLAB, 114 bytes
#,14ABLMTbesty 1A
f=@(s)[mod(sort(cell2mat(cellfun(@(c)c+128*(0:nnz(c)-1),mat2cell(sort(s),1,histc(s,unique(s))),'un',0))),128),''];
'()*+,-0128:;=@[]acdefhilmnoqrstuz'(),0128@acefilmnorstu'(),12celmnostu'(),12celnstu(),clnst(),cls(),cs(),()()()()
{'S', 'g', 'i', 'n', 'r', 't'}
在Python中输出,因为“正常”的方式是"String"
。
{'a','b'}
Matlab不接受:,因为您可以向每个字符添加一个字符,如下所示:{'aa','b'}
。您的输入和输出必须使用相同的格式。