Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
String 如何查找不包含子字符串回文的所有字符串_String_Algorithm_Probability_Combinatorics_Discrete Mathematics - Fatal编程技术网

String 如何查找不包含子字符串回文的所有字符串

String 如何查找不包含子字符串回文的所有字符串,string,algorithm,probability,combinatorics,discrete-mathematics,String,Algorithm,Probability,Combinatorics,Discrete Mathematics,免责声明:这是一个从HackerRank上解决的问题,但他们的编辑回答不够,所以我希望得到更好的答案。如果违反任何政策,请让我知道,我会记下来 问题: 给您两个整数,N和M。在不包含任何长度大于1的回文字符串(作为连续子字符串)的大小为M的字母表集合下,计算长度为N的字符串数 N=2,M=2->2::AA,AB,BA,BB N=2,M=3->6::AA,AB,AC,BA,BB,BC,CA,CB,CC ABCDE计数,因为它不包含任何回文子字符串 ABCCC不计算,因为它包含长度大于1的回文“CC

免责声明:这是一个从HackerRank上解决的问题,但他们的编辑回答不够,所以我希望得到更好的答案。如果违反任何政策,请让我知道,我会记下来

问题: 给您两个整数,N和M。在不包含任何长度大于1的回文字符串(作为连续子字符串)的大小为M的字母表集合下,计算长度为N的字符串数

N=2,M=2->2::AA,ABBA,BB

N=2,M=3->6::AA,ABACBA,BB,BCCACB,CC

ABCDE计数,因为它不包含任何回文子字符串

ABCCC不计算,因为它包含长度大于1的回文“CCC”

社论 以下是我认为错误的答案:

对于N>=3,有(M−2) 选择任何下一个符号的方法(在前两个符号之后)-基本上,它不应该与前一个和前一个符号重合,因为它们不相等

If N=1, return M

If N=2, return M * (M-1)

If N>=3, return M * (M-1) * (M-2)^(N-2)
反例:N=4,M=3,“ABCC”

我的解决方案试试 当我研究这个问题时,我试图找到所有包含回文子串的字符串,然后从总数中减去它们,M^N。我遇到了很多计数过多的问题。例如,“ABABA”有n=3的“ABA”、“BAB”、“ABA”和n=5的“ABABA”


谢谢你帮我解释这个问题。我真的希望有一个好的答案来解决这个问题

假设您一次构建一个字母的无回文字符串。对于第一个字母,您有M个选项,对于第二个字母,您有M-1,因为您不能使用第一个字母。这是显而易见的


对于前两个字母之后的每个字母,你不能使用前一个字母,也不能使用前一个字母,所以这是两个选择。其他的信呢?好的,如果使用其中一个创建回文,那么它必须是长度至少为4的回文-但是如果添加一个字母为K>=2创建了长度为K+2的回文,那么字符串必须已经具有长度为K的回文,才能构建新的回文。(对于KI,我看不出你的反例应该显示什么。它包含回文
CC
,并且它违反了对无回文字符串的规定约束,因为它有一个与前一个字母相同的字母。一切似乎都是解决方案所说的。