方法1:以计数排序
直观:
如果我们想不使两个‘a’相邻,很自然写作“aXaXaXaX....”,其中X是一些字母,到目前为止,让我们假设这个任务是可行的(等同于答案不是“”)
让我们将字符串S排序,所以所有的同样种类的字母出现在连续的方格中,然后当按照下列交错的方式写入时,例如S[3],S[0],S[4],S[1],S[5],S[2],相邻的字母永不接触(特定的交错模式是我们在位置1写步长为2,在位置0开始步长为2)
这条规则的例外是如果N是奇数,那么当交错像S[2],S[0],S[3],S[1],S[4],我们也许出现错误如果那里有同样的3个字母相同那么从S[0]或者S[1]开始,为了防止在这个案例中出现这种错误,我们需要确保大多数相同的字母全出现在结尾。
最后,很容易看出如果N是字符串的长度,只要有一些字母的计数超过(N+1)/2,任务就是不可能的。
算法:
找到每个字母的计数,用它来按照计数排列字符串
如果在一些点一些字符串出现的次数超过(N+1)/2,任务就是不可能的
其它情况,交错字符串按照上面的顺序