Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 给定单词的可能回文字谜的数量_Algorithm_Math_Combinatorics_Palindrome_Anagram - Fatal编程技术网

Algorithm 给定单词的可能回文字谜的数量

Algorithm 给定单词的可能回文字谜的数量,algorithm,math,combinatorics,palindrome,anagram,Algorithm,Math,Combinatorics,Palindrome,Anagram,我必须找到一个给定单词可能出现的回文字谜的数量。 假设单词是aaabbb,我的方法是 准备一个包含每个字母出现时间的哈希图 我的例子是 a--->3 b--->4 若字符串的长度是偶数,那个么每个字母的出现次数应该是偶数,以形成给定单词的回文,否则不会 回文字谜是0 若字符串的长度是奇数,那个么在最大情况下,字母的一个出现可以是奇数,另一个应该是偶数 上面这两个步骤是为了发现一个给定的单词是否可以形成回文 现在,要找到没有回文字谜,我应该采取什么方法?首先要注意的是,如果单词的长

我必须找到一个给定单词可能出现的回文字谜的数量。 假设单词是
aaabbb
,我的方法是

  • 准备一个包含每个字母出现时间的哈希图

    我的例子是

    a--->3
    b--->4
    
  • 若字符串的长度是偶数,那个么每个字母的出现次数应该是偶数,以形成给定单词的回文,否则不会 回文字谜是0

  • 若字符串的长度是奇数,那个么在最大情况下,字母的一个出现可以是奇数,另一个应该是偶数

  • 上面这两个步骤是为了发现一个给定的单词是否可以形成回文


    现在,要找到没有回文字谜,我应该采取什么方法?

    首先要注意的是,如果单词的长度是奇数,那么必须只有一个字符的出现次数是奇数。如果单词长度为偶数,则不得有出现次数为奇数的字符。在这两种情况下,您都在寻找排列字符对的方式。您正在查找排列的数量,因为顺序很重要:

    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。请澄清