回文报很有趣,但是其他一些字符串却开始被忽略。通过将这些字符串分成回文的大块数组,可以将它们变成大块的回文。
例如,"abcabca"
如果我们逐个字符地读取字符串,那么它就不是回文,但是有三种不同的方式可以使它成为大块的回文:
["abcabca"]
["a" "bcabc" "a"]
["a" "bc" "a" "bc" "a"]
如您所见,矮胖回文是一个非常包容的概念;每个字符串都可以至少以一种方式变成粗大的回文。
任务
编写一个程序或函数,该程序或函数接收字符串作为输入,并返回其回文式块状体,即回文式数组的分区数。
测试用例
OUTPUT | INPUT
--------+---------------------------------------------
1 | ""
1 | "a"
1 | "ab"
2 | "aa"
2 | "aaa"
3 | "abcabca"
4 | "abababab"
28 | "abcabcaabababababcabca"
1 | "bbbbabababbbbababbbaaaaa"
20 | "ababbaaaabababbbaaabbbaa"
5 | "baaabaabababaababaaabbaab"
62 | "bbaaababbabbabbbabaabaabb"
2 | "a man a plan a canal panama"
25 | "ama nap lan aca nal pan ama"
93 | "SATOR AREPO TENET OPERA ROTAS"
976 | "abcabcaabcabcaabcabcaabcabcaabcabcaabcabca"
28657 | "ababababababababababaababababababababababa"
2097152 | "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
附加规则
您可能会假设输入将包含42个或更少的可打印ASCII字符,并可选地用您的语言的字符串定界符和/或后跟换行符。
对于每个有效的输入字符串,您的代码必须在我的机器上(Intel Core i7-3770、16 GiB RAM,Fedora 21)在不到一分钟的时间内完成。
使用适当的算法,应该很容易遵守此时间限制。但是,您很可能无法遍历输入字符串的所有分区。
如果选择将输出打印到STDOUT,则可以在其后跟一个换行符。
适用标准代码高尔夫球规则。