Algorithm 给定单词的可能回文字谜的数量
我必须找到一个给定单词可能出现的回文字谜的数量。 假设单词是Algorithm 给定单词的可能回文字谜的数量,algorithm,math,combinatorics,palindrome,anagram,Algorithm,Math,Combinatorics,Palindrome,Anagram,我必须找到一个给定单词可能出现的回文字谜的数量。 假设单词是aaabbb,我的方法是 准备一个包含每个字母出现时间的哈希图 我的例子是 a--->3 b--->4 若字符串的长度是偶数,那个么每个字母的出现次数应该是偶数,以形成给定单词的回文,否则不会 回文字谜是0 若字符串的长度是奇数,那个么在最大情况下,字母的一个出现可以是奇数,另一个应该是偶数 上面这两个步骤是为了发现一个给定的单词是否可以形成回文 现在,要找到没有回文字谜,我应该采取什么方法?首先要注意的是,如果单词的长
aaabbb
,我的方法是
a--->3
b--->4
现在,要找到没有回文字谜,我应该采取什么方法?首先要注意的是,如果单词的长度是奇数,那么必须只有一个字符的出现次数是奇数。如果单词长度为偶数,则不得有出现次数为奇数的字符。在这两种情况下,您都在寻找排列字符对的方式。您正在查找排列的数量,因为顺序很重要: n=字符对数(AABBB将有3对,aabbcccc将有4对) (n) !/(a对的数量!*b对的数量!*等等) 在aabbb的例子中,你会发现aab的排列: 三!/2.1! = 三, baa=baabab 阿巴巴 aab=aabbbaa 在aabbcccc案例中,您可以找到abcc的排列: 四!/2! = 12: abcc acbc accb bacc bcac bcca cabc cacb cbac cbca ccab
中华公所使用组合数学。有多少种方式可以安排一半的字母?但是对于重复的字母我应该怎么做当所有a和b都被认为相等时,
n
a和m
b可以排序的方式有多少种是(a+b)!/(a!*b!)
扩展到两个以上的字母:(sum(n_i))!/产品(n_i!)
。注意不要让阶乘溢出。我同意@MOehm:这是数学,不是算法。此外,在(ii)中,你说“最多一个……可能很奇怪”。更准确地说,只有一个字母必须有奇数。它不是“max”,因为必须正好有一个。根据你的算法,“aaa”的答案是3。但实际上应该是1。请澄清