什么是数字anagram是字符串中的回文

时间:2013-07-05 23:34:11

标签: c++ string algorithm palindrome anagram

字符串中的回文字符数是多少? 示例:string =“aaabbbb”; 可能的anagram是回文“abbabba”,“bbaaabb”和“bababab”。 这里的问题是时间,我有10 ^ 9的字符串。 这是我的最终代码可以有人告诉我它有什么问题吗?

2 个答案:

答案 0 :(得分:8)

输入字符串中的每个字母都必须以偶数显示,execpt一个字母可以以奇数显示。这封信在palindron中有一个固定的位置。它必须完全在中间。可以说字母a,b,c,......的数量是#a,#b,#c,......

你只关心这些信件的一半,因为在一个palindron,下半部分是上半部分。所以我们只使用了一半的字母:

enter image description here

我使用了floor函数,所以我计算出的字母是奇数,正确。

那么上半年有多少排列?这是一个明显排列的情况,所以我们得到

enter image description here

的可能性。


对于你的例子: string =“aaabbbb”;

我们得到:#a = 3,#b = 4。因此

enter image description here

我们得到3个palindroms,这些是“abbabba”,“bbaaabb”和“bababab”,就像你发布的那样。


所以,如果你有一个非常大的字符串:

  1. 计算每个字母的数量
  2. 检查是否只有1个字母以奇数显示。它有更多,你不能创建palindroms。
  3. 使用公式计算不同的palindroms数量。

答案 1 :(得分:0)

由于字谜的每一面都必须是另一面的镜像,我们关心的字谜数量基本上只是我们可以在一边形成的字谜数量,所以:

  1. 对字符串中的字符进行分组,使相同的字符在一起(例如,通过排序)。
  2. 检查多个字符的奇数(因此,#anagrams = 0)。
  3. 取每组相同的一半字符(在奇数的情况下截断)。
  4. 计算这些字符的唯一排列数。