(每日一练28750)题目名称:最长回文串

文盲老顾
WEB应用领新星创作者
博客专家认证
2023-04-26 08:33:23

找出最长回文串 (“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串)(测试用例仅做参考,我们会根据代码质量进行评分)

经典题目,不过代码量最少的,应该是马拉车算法(Manacher),嗯,老顾在每日一练以及CSDN周赛,不是以算法效率为目的,而是以不超时的最少代码为目的。

s = input()
p = '#'.join('^' + s + '$')
t = [0 for _ in range(len(p))]
for i in range(1,len(p) - 1):
    while p[i - t[i] - 1] == p[i + t[i] + 1]:
        t[i] += 1
mx = max(t)
pos = t.index(mx) // 2 - (mx + 1) // 2
print(s[pos:pos+mx])

js 里没有 max 方法,我们可以在 t[0] 位置记录一下最大长度,然后就没什么区别了

s = readline()
p = ('^' + s + '$').replace(/(?=.)/gi,'#').substr(1)
t = Array.from(new Array(p.length)).map(x => 0)
for (var i = 1 ; i < p.length - 1 ; i ++){
    while (p.charAt(i - t[i] - 1) == p.charAt(i + t[i] + 1)){
        t[i] ++;
        t[0] = t[i] > t[0] ? t[i] : t[0];
    }
}
pos = Math.floor(t.indexOf(t[0],1) / 2) - Math.floor((t[0] + 1) / 2)
print(s.substr(pos,t[0]))
...全文
109 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

321

社区成员

发帖
与我相关
我的任务
社区描述
主要用于技术交流,包括但不限于 .net,mssql,js,css,python,算法,运维。也可以晒最新技术,美图,运动等。最后,如果有问题,可以提问,老顾能帮忙的会尽量帮忙哦。
前端sqlserverasp.net 技术论坛(原bbs) 北京·西城区
社区管理员
  • 文盲老顾
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧