首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找回文子字符串的反射索引

查找回文子字符串的反射索引
EN

Code Golf用户
提问于 2020-08-29 03:36:08
回答 1查看 255关注 0票数 8

问题陈述:您将收到回文字符串的子字符串。必须返回子字符串的索引,该索引标记原始字符串的反射点。只提供子字符串,它不一定是回文,因为它不一定以原始回文字符串的中间为中心。

输入:长度为2n + 1, 1 <= n <= 1000的子字符串,它包含一些较大回文字符串的反射中心。

Output:返回标记反射点的子字符串的索引。可以是0索引,也可以是1索引。

测试用例(在所需索引处的字符是粗体,以更清楚地显示期望的输出):

输入

  1. 马纳拉南
  2. 卡拉卡蒂
  3. [医]黄体
  4. 鼻炎

输出

  1. 9(整串字是“一个人计划一个巴拿马运河”,空格被移除)
  2. 4(整根绳子是“我看到的是一辆车还是一只猫”,空格被移除)
  3. 6(整根绳子是“猫头鹰先生是我的金属蠕虫”,空格被移除)
  4. 2(整根绳子是“卫生动物园里的老鼠”,空格被移除)

获胜标准:这是以字节为单位的密码-高尔夫最短代码赢。

假设:假设只有一个候选回文

限制:02n (最后一个索引)是无效的输出。

EN

回答 1

Code Golf用户

发布于 2020-08-29 07:41:20

Python 2,65字节

代码语言:javascript
复制
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。下面是检查每个字符周围回文的方法:

代码语言:javascript
复制
abcdefg
a c
ab de
abc efg
  cd fg
    e g

我们看到正确的字符串,索引从n+12*n+1。左边的字符串更棘手,但是从相反的角度来看(从字符串的末尾开始),我们从n-1开始并移到2*(n-len(s)) (这是一个从字符串后面索引的负数)。由于我们可以假设只有一个可行的回文候选,我们可以提前终止,如果我们找到一个。

Python3.8,72字节

代码语言:javascript
复制
f=lambda s,t='':(max(k:=s[1:],t).find(min(k,t))==0)*len(t)or f(k,s[0]+t)

在网上试试!

这种做法似乎很有希望,但只是更长一些。

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

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

复制
相关文章

相似问题

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