问题陈述:您将收到回文字符串的子字符串。必须返回子字符串的索引,该索引标记原始字符串的反射点。只提供子字符串,它不一定是回文,因为它不一定以原始回文字符串的中间为中心。
输入:长度为2n + 1, 1 <= n <= 1000的子字符串,它包含一些较大回文字符串的反射中心。
Output:返回标记反射点的子字符串的索引。可以是0索引,也可以是1索引。
测试用例(在所需索引处的字符是粗体,以更清楚地显示期望的输出):
输入
输出
获胜标准:这是以字节为单位的密码-高尔夫最短代码赢。
假设:假设只有一个候选回文
限制:0和2n (最后一个索引)是无效的输出。
发布于 2020-08-29 07:41:20
f=lambda s,n=1:n*(s[n+1:2*n+1]==s[n-1:n-len(s)<<1:-1])or f(s,n+1)考虑一下字符串abcdefg。下面是检查每个字符周围回文的方法:
abcdefg
a c
ab de
abc efg
cd fg
e g我们看到正确的字符串,索引从n+1到2*n+1。左边的字符串更棘手,但是从相反的角度来看(从字符串的末尾开始),我们从n-1开始并移到2*(n-len(s)) (这是一个从字符串后面索引的负数)。由于我们可以假设只有一个可行的回文候选,我们可以提前终止,如果我们找到一个。
f=lambda s,t='':(max(k:=s[1:],t).find(min(k,t))==0)*len(t)or f(k,s[0]+t)这种做法似乎很有希望,但只是更长一些。
https://codegolf.stackexchange.com/questions/210301
复制相似问题