最多包含10 ^ 5个A..Z字符的字符串。任务是重新排列它,以便没有任何字符形成一行。对于多个解决方案,按字母顺序排在第一位的是正确的。当然,它必须在合理的时间内完成。
所以我尝试了两种方法,其中一种方法正确地重新排列,但效率非常低,另一种方法破坏了逻辑,我想。
进展缓慢。
不正确的方法(并不总是按字母顺序给出第一个答案)
我真的被困住了,在这里想不出别的什么。
示例:
"HHABC" -> "ABHCH";
"CBAXXXX" -> "XAXBXCX";
"AAABBBCCCCCCCDDDDD" -> "ABABACBCDCDCDCDCDC";
这是详细的模型求解算法。我想我不允许发布实际的代码,所以就像这样:
它比我最终编写的混乱更短更简单(虽然它工作得很好,非常感谢你的帮助)。
答案 0 :(得分:1)
好点Paul R.如果您的直方图包含每个元素的出现次数,则可以按出现次数从高到低对这些桶进行排序。只要一个存储桶中的出现次数不大于存储桶的数量,您就应该能够形成可行的字符串。从最大的桶开始,循环遍历下一个最大桶中的每个桶,直到较小的桶。
例如,AAAAABBCRRSTT
AAAAA BB C RR S TT - > AAAAA BB RR TT C S
ABARATACASBRT