首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Farigiraf我的Girafarig

Farigiraf我的Girafarig
EN

Code Golf用户
提问于 2022-11-17 20:14:54
回答 2查看 2.3K关注 0票数 19

回文是一个完全相反的词。我将将单词的左回文根定义为单词的最短前缀,以该前缀开头的尽可能最短的回文是原始单词。racecar的左回文根为race,左回文根为ABB

第二种情况一开始似乎不太明显,因此请考虑下面的表格:

代码语言:javascript
运行
复制
Prefix | Shortest palindrome with same prefix
       |
""     | ""
"A"    | "A"
"AB"   | "ABA"
"ABB"  | "ABBA"
"ABBA" | "ABBA"

由于映射到ABBA的最短前缀是ABB,所以它是ABBA的左回文根。

从前缀转换到最小回文的过程也称为左回文闭包,这在这一相关挑战中可以找到。

编写以回文作为输入的最短代码,返回以输入的左回文根相反开始的最短回文。相应地,查找输入的左回文根反向的左回文闭合。

您可以假设输入是某些任意字母表的一部分,例如小写的ASCII或正整数,只要它不忽略挑战。

测试用例

代码语言:javascript
运行
复制
girafarig -> farigiraf
farigiraf -> girafarig
racecar -> ecarace
ABBA -> BBABB
 -> 
a -> a
aa ->  aa
aba -> bab
aaa -> aaa
1233321 -> 333212333
11211 -> 2112
ABABA -> BABAB
CBABCCBABC -> CCBABCC

您可以使用这个程序创建其他案例。

EN

回答 2

Code Golf用户

发布于 2022-11-17 23:30:04

JavaScript (ES6),113个字节

本质上是OP提供的Python程序的一个端口。虽然我确实找到了更短的方法,但我还没有找到一种有效的更短的方法。

代码语言:javascript
运行
复制
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):s

在网上试试!

票数 6
EN

Code Golf用户

发布于 2022-11-18 11:54:31

木炭,48字节

代码语言:javascript
运行
复制
∨⌊ΦEθ…θ⊕κ⁼⊗⊕κL⁺θ⊟ΦEι…⮌ι⊕μ⁼λ⮌λω‖OO←L⊟ΦE⊕ⅈ…KAκ⁼ι⮌ι

在网上试试!链接是详细的代码版本。解释:

代码语言:javascript
运行
复制
∨⌊ΦEθ…θ⊕κ⁼⊗⊕κL⁺θ⊟ΦEι…⮌ι⊕μ⁼λ⮌λω

输出其回文闭包等于画布输入的最短前缀。这是计算为前缀的最长回文后缀的长度加上输入的长度等于前缀长度的两倍。

代码语言:javascript
运行
复制
‖OO←L⊟ΦE⊕ⅈ…KAκ⁼ι⮌ι

计算前缀最长回文前缀的长度,并将画布用该重叠量反射到左侧,从而生成其右回文闭包。

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/254668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档