String 对只有两个不同字符的字符串进行排序的最有效方法是什么?
如果我知道字符串不超过2个不同字符 示例集:String 对只有两个不同字符的字符串进行排序的最有效方法是什么?,string,sorting,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个不同字符的事实是否会使其他排序更有效 如果字符串的最大长度很重
aab
abbbbabb
bbbaa
aaaaaaa
aaaa
abab
a
aa
aaaaa
aaabba
aabbbab
按字母顺序排列最有效的方法是什么
生成的排序集:
a
aa
aaaa
aaaaa
aaaaaaa
aaabba
aab
aabbbab
abab
abbbbabb
bbbaa
编辑:
我知道我可以使用一个普通的排序算法(快速排序、合并排序),但问题是:不超过2个不同字符的事实是否会使其他排序更有效
如果字符串的最大长度很重要,我想知道两种不同情况的答案:
我还可以假设所有字符串都是不同的。该字符串或方法将返回一个负整数、0或一个正整数,具体取决于所比较的两个字符串的字母顺序。试试看。仅基于渐进比较的常规排序算法无法获得比
O(nlogn)
更好的结果。在您的案例中,有一个额外的信息(2个不同的字符)有可能改善这个结果。产生O(n)
结果的简单方法:
x
)- 每当遇到
时,增加一个计数器x
- 第一次遇到非x字符时(让我们将其标记为
),请将其存储在专用变量中y
x
和y
。
如果x
根据计数器从开头用x
填充字符串,其余用y
如果x>y
从一开始用y
的字符串长度x
的插槽数填充字符串,其余用x
填充字符串哪种语言?您尝试过什么?字符串的最大长度是多少?@rcgldr好问题-问题中添加的信息您可以将字符串转换为二进制位,0代表a,1代表b,但您必须以位数跟踪字符串长度。使用基数4(每个字符2位),0=无字符,1='a',2='b',3=未使用,但使所有字符串长度相同,左对齐。如果字符串长度不太长,可以使用计数/基数排序。这看起来像是对字符串中的字符进行排序。我的意思是对字符串集进行排序。(我认识到我的例子可能使这一点不清楚,所以我对其进行了编辑。)