回文是一个完全相反的词。我将将单词的左回文根定义为单词的最短前缀,以该前缀开头的尽可能最短的回文是原始单词。racecar的左回文根为race,左回文根为ABB。
第二种情况一开始似乎不太明显,因此请考虑下面的表格:
Prefix | Shortest palindrome with same prefix
|
"" | ""
"A" | "A"
"AB" | "ABA"
"ABB" | "ABBA"
"ABBA" | "ABBA"由于映射到ABBA的最短前缀是ABB,所以它是ABBA的左回文根。
从前缀转换到最小回文的过程也称为左回文闭包,这在这一相关挑战中可以找到。
编写以回文作为输入的最短代码,返回以输入的左回文根相反开始的最短回文。相应地,查找输入的左回文根反向的左回文闭合。
您可以假设输入是某些任意字母表的一部分,例如小写的ASCII或正整数,只要它不忽略挑战。
girafarig -> farigiraf
farigiraf -> girafarig
racecar -> ecarace
ABBA -> BBABB
->
a -> a
aa -> aa
aba -> bab
aaa -> aaa
1233321 -> 333212333
11211 -> 2112
ABABA -> BABAB
CBABCCBABC -> CCBABCC您可以使用这个程序创建其他案例。
发布于 2022-11-17 23:30:04
本质上是OP提供的Python程序的一个端口。虽然我确实找到了更短的方法,但我还没有找到一种有效的更短的方法。
s=>[...s].some(c=>(F=S=>[...S].some(c=>[p+R==(Q=S+q)][q=c+q,p+=c,0],p=q='')&&Q)(S+=c,R=c+R)==s,R=S='')?F(R,R=S):shttps://codegolf.stackexchange.com/questions/254668
复制相似问题