我正在尝试提出一种算法来计算由父字符串的字符形成的不同字符串的回文数
现在我正在使用以下代码来测试生成的字符串是否是回文:
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 这样的词,并提出所有可能的回文,只要它是回文,字符串中任何字符的任意组合都可以。例如,对于racecar,racecar 当然可以像 aaacaaa 甚至 eecrcee 一样工作。我的尝试是徒劳的,有没有人尝试过基于具有这些约束的字符串生成回文?
最佳答案
可能的回文数取决于您可以选择的字符数量以及单词的长度。
在“racecar”示例中,您有 4 个唯一的字母可供选择,并且您需要创建一个长度为 7 的字符串。因此第一个字符有 4 个选择,第二个字符有 4 个选择,第三个字符有 4 个选择, 4 代表第四个(中间字符)。第 5 个字符必须与第 3 个字符相同,第 6 个字符必须与第 2 个字符相同,第 7 个字符必须与第 1 个字符相同。
您只需为字符串的一半(在本例中为前 4 个字母)选择一个字母,因为在回文中,另一半是前半部分的镜像。所以这个例子总共有 4*4*4*4 种可能性。
一般来说,这将是 N^K
(Math.pow(N, K)
) 可能的回文,其中 N
是您可以选择的不同字母的数量,K
是您需要的字符串长度的一半(添加如果字符串长度为奇数则为 1)。
关于Java计算所有潜在的回文数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39323157/