你的输入将是一个由小英文字母组成的字符串。
您的任务是确定作为回文的原始字符串的不同排列数。
输入字符串最多有100个字母。对于较长的字符串,结果可能非常大,因此输出应该是排列模666013的数目。
例如,
cababaa -> 3可能的排列是:
aabcbaa
abacaba
baacaab这是密码-高尔夫,所以最短的答案获胜!
发布于 2017-02-22 20:08:14
发布于 2017-02-22 20:30:13
Permutations@#~Count~_?PalindromeQ~Mod~666013&接受一个字符列表作为输入。
效率极低,因为它实际上生成输入的所有排列,然后计数回文排列。
发布于 2017-03-19 18:17:13
If[i=Floor[t=Last/@Tally@#/2];Tr[t-i]<1,Multinomial@@i,0]~Mod~666013纯函数,以字符列表作为输入,并返回整数。虽然不像马丁·安德的数学答案那么短,但它仍然是一种可爱的方法,它似乎与的Perl 6答案中的方法相同。
首先,t=Last/@Tally@#/2计算输入中所有不同字符的计数,除以2;然后i=Floor舍入t中的任何分数。注意,当原始计数中最多有一个奇数时,即当t中最多有一个分数时,输入的回文排列就会存在。我们可以通过简单地将t-i的所有元素(使用Tr)进行测试:如果答案小于1,则会出现回文排列,否则就不会。
如果存在,则i表示排列左半部分中不同字符的计数,这些字符可以任意排列。这样做的方法的数量正是Multinomial系数(某个阶乘的商数),这是数学内置的。
https://codegolf.stackexchange.com/questions/110965
复制相似问题