我有一个 16 MB 的文本文档,其中包含一个巨大的字母和数字字符串,没有任何分隔符。摘录:“as81jsa8sm1o1kmka9s93m1l”
有没有一种简单的方法来按字母顺序排列所有字符,而无需编写脚本?恐怕JS会在文件的重量下崩溃。
谢谢。
我有一个 16 MB 的文本文档,其中包含一个巨大的字母和数字字符串,没有任何分隔符。摘录:“as81jsa8sm1o1kmka9s93m1l”
有没有一种简单的方法来按字母顺序排列所有字符,而无需编写脚本?恐怕JS会在文件的重量下崩溃。
谢谢。
如果您知道字符串仅包含字母和数字,则可以使用桶排序并获得良好的性能。
我不确定您使用的是什么语言,所以我假设您可以逐个字符地读取字符串。我的解决方案是伪代码
int[] buckets = int[36]; // 26 for letters, 10 for numbers; assuming only lowercase characters
while(string.hasNext()) {
char x = next character in string;
if(x.isAlpha()) {
buckets[x-'a']++;
}else {
buckets[26 + x - '0']++
}
}
要打印出排序后的字符串:
string s = ""; // at the end of the loops, s will contain the sorted string
for(int i =0 ; i < 26; ++i) {
int y = buckets[i];
for(int j = 0; j < y; ++j) {
s+=(y+'a');
}
}
for(int i =0 ; i < 10; ++i) {
int y = buckets[i+26];
for(int j = 0; j < y; ++j) {
s+=(y+'0');
}
}