最有效的方法来排序只有2个不同字符的字符串?

时间:2015-12-02 14:39:14

标签: string sorting

如果我知道的字符串不超过2个不同的字符,

示例集:

aab
abbbbabb
bbbaa
aaaaaaa
aaaa
abab
a
aa
aaaaa
aaabba
aabbbab

将它们按字母顺序排列的最有效方法是什么?

生成的排序集:

a
aa
aaaa
aaaaa
aaaaaaa
aaabba
aab
aabbbab
abab
abbbbabb
bbbaa

编辑:

我知道我可以使用正常的排序算法(快速排序,合并排序),但问题是:不超过2个不同字符的事实会使其他更有效的事情吗?

如果字符串的最大长度很重要,我想知道两种不同场景的答案:

  1. 字符串的最大长度与字符串数相同(n个正在排序的字符串,n个字符串的最大长度)

  2. 字符串的最大长度为log n,n为要排序的字符串数

  3. 我还可以假设所有字符串都是不同的。

2 个答案:

答案 0 :(得分:-1)

String compareTocompareToIgnoresCase方法将返回一个负整数,0或一个polsitive整数,具体取决于所比较的两个字符串的字母顺序。试试吧。

答案 1 :(得分:-1)

仅基于渐近比较的一般排序算法无法比O(nlogn)更好地获得结果。在您的情况下,有一个额外的信息(2个不同的字符),有可能改善这一结果。一种产生O(n)结果的简单方法:

  1. 检查第一个字符(让我们标记x)。
  2. 扫描字符串直到结束
    • 遇到x时会增加一个计数器。
    • 遇到非x字符(让我们将其标记y)第一次将其存储在专用变量中
  3. 比较xy。 如果x < y根据计数器从x开始填充字符串,其余部分填入y 如果x > yy的{​​{1}}的广告位开头填充字符串,其余字符为string length-num of x