Java 计算所有可能的回文数

Posted

技术标签:

【中文标题】Java 计算所有可能的回文数【英文标题】:Java Calculating all potential palindromes 【发布时间】:2016-09-05 02:23:57 【问题描述】:

我正在尝试提出一种算法来计算由字符串的字符组成的不同字符串的回文数

现在我正在使用以下来测试生成的字符串是否是回文:

public static Boolean isPalindrome(String s) 

    int n = s.length();
    for (int i=0;i<(n / 2);++i) 
    
        if (s.charAt(i) != s.charAt(n - i - 1)) 
        
            return false;
        
    
    return true;

哪个工作正常,但是我创建回文的任何尝试都没有按照我想要的方式工作。基本上,我想使用 racecar 之类的词,并提出所有 回文,只要它是回文,字符串中任何字符的任意组合都可能出现。因此,例如,使用赛车当然赛车会像 aaacaaa 甚至 eecrcee 一样工作。我的尝试是徒劳的,有没有人尝试过基于具有这些约束的字符串生成回文?

【问题讨论】:

如果你只想要回文数,你可以数学计算。例如,在您的“赛车”示例中,使用字母 [a,c,e,r] 有 4*4*4*4 = 256 个长度为 7 的可能回文。 向我们展示您的尝试,我们将帮助您找出您做错了什么。正如您目前的问题一样,您要求我们为您编写代码,这对于 *** 来说是题外话。见What topics can I ask about here? 有什么理由返回一个大写 B 的布尔值?带有小 b 的布尔值将是常态。 生成的回文必须和原始的长度相同吗?对于赛车,crarc 和 aaaccceeecccaaa 会起作用吗?如果它们可以是任意长度,当然会有无限多。 如果我没记错的话,唯一字母的数量提升到 (n + 1) / 2 的幂。 【参考方案1】:

可能的回文数取决于您可以选择多少个字符,以及单词的长度。

在“racecar”示例中,您有 4 个唯一的字母可供选择,并且您需要创建一个长度为 7 的字符串。所以第一个字符有 4 个选择,第二个有 4 个选择,第三个有 4 个选择, 4 代表第 4 个(中间字符)。第 5 个字符必须与第 3 个相同,第 6 个必须与第 2 个相同,第 7 个必须与第 1 个相同。

您只需为字符串的一半(在本例中为前 4 个字母)选择一个字母,因为在回文中,另一半是前半部分的镜像。所以这个例子总共有 4*4*4*4 种可能性。

一般来说,这将是 N^K (Math.pow(N, K)) 可能的回文,其中 N 是您可以选择的不同字母的数量,并且K 是您需要的字符串长度的一半(如果字符串长度为奇数,则加 1)。

【讨论】:

这正是我一直在寻找的真棒谢谢!我刚刚根据这个数学公式在我的程序中创建了一个算法,它工作得很好(当偶数只使用 N / 2 时,奇数需要做 (N + 1) / 2)。非常感谢!

以上是关于Java 计算所有可能的回文数的主要内容,如果未能解决你的问题,请参考以下文章

算法趣题之回文数

递推递归组合数,汉诺塔,回文数问题(java)

回文数

LeetCode——9 Java之回文数

PAT 1079. 延迟的回文数

Java基础50道经典练习题(25)——求回文数