Time: 20190906
Type: Hard

题目描述

给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。

示例 1:

输入: “aacecaaa”
输出: “aaacecaaa”
示例 2:

输入: “abcd”
输出: “dcbabcd”

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shortest-palindrome
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

本题恰好是在Leetcode-cn上的第100道题。

在一个字符串前面添加字符,最长是把整个字符串镜像添加使其变为回文串。

先从朴素的思路做起,我们先写个判断字符串是否为回文的函数,然后从右往左一点点往里面填,拼接到旧的字符串上,判断是不是回文串,如果是的话,直接返回即可。

但是这个算法会有一个样例超时。

class Solution:def shortestPalindrome(self, s: str) -> str:if len(s) < 2:return sdef isPalindrome(s):n = len(s)for i in range(n // 2):if s[i] != s[n - i - 1]:return Falsereturn Trueif isPalindrome(s):return sfor i in range(len(s) - 1, -1, -1):new_s = s[i:][::-1] + sif isPalindrome(new_s):return new_s# print(new_s)return ""

需要求助于更优秀的算法。

换个思路,我们先从左往右找到字符串的最长的回文子串,剩余的部分添加一个逆序即可。

代码

class Solution:def shortestPalindrome(self, s: str) -> str:n = len(s)if n == 0:return ""rs = s[::-1]i = 0while True:if rs[i:] == s[:n-i]: # 找到原字符串最大的回文部分print(rs[i:])breaki += 1return rs[:i] + s

END.

Leetcode 214.最短回文串相关推荐

  1. LeetCode 214. 最短回文串(字符串哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串. 找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aace ...

  2. leetcode 214. 最短回文串 解题报告

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...

  3. 214. 最短回文串

    214. 最短回文串 原始题目链接:https://leetcode.cn/problems/shortest-palindrome/ 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文 ...

  4. leetcode 214. Shortest Palindrome | 214. 最短回文串(Java)

    题目 https://leetcode.com/problems/shortest-palindrome/ 题解 看了 Related Topics - Rolling Hash 下的相关题目,看到了 ...

  5. leetcode214. 最短回文串

    214. 最短回文串 难度困难114 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa& ...

  6. python最短回文串_LeetCode-Python-214. 最短回文串

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...

  7. 力扣- - 最短回文串(KMP算法)

    力扣- - 最短回文串(KMP算法) 文章目录 力扣- - 最短回文串(KMP算法) 一.题目描述 二.分析之KMP算法 1.暴力法 2.KMP算法 3.next数组求法1:暴力查找最长的前后缀 4. ...

  8. leetcode214. 最短回文串(kmp)

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...

  9. LeetCode:验证回文串【125】

    LeetCode:验证回文串[125] 题目描述 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 1: 输入: ...

最新文章

  1. C++程序员学Python:C与Python进行交互
  2. angular 学习理解笔记
  3. Confluence 6 下载和安装 MySQL 驱动
  4. I Love You的真正含义
  5. Python学习——import语句导入模块顺序
  6. python清空列表clear_如何在Python中清空列表?
  7. UVA - 400 Unix ls
  8. vs2010 OpenGL 初体验
  9. Qt 小项目 -- 颜色拾取器
  10. PDF文件的书签批量自动导入和导出 PDFBookmark-Exchanger
  11. RTP直播分发服务器集群方案
  12. 读《费曼学习法》有感
  13. 论单片机IO引脚驱动能力的提高
  14. 从python入门到人生巅峰
  15. SELECT FOR ALL ENTRIES IN 通过配置优化速度
  16. 关于GBK中的英文字符占用一个字节还是两个字节的问题
  17. nvm的安装和使用(详细)
  18. 什么是角色建模?3D角色建模简介
  19. TCP Flags标志位介绍
  20. 民间各类恐怖请仙大法(上)(转帖)

热门文章

  1. google protobuf的简介、安装和使用
  2. (一)Linux下C++ OpenCV开发环境搭建
  3. git学习(三)分支管理
  4. webpack打包优化_如何提升 Webpack 打包速度
  5. python文件是否存在_Python判断文件是否存在的三种方法
  6. 深度学习(00)——GPU版本的TensorFlow
  7. java面向对象_谈谈Java的面向对象
  8. 全局配置_中兴天机配置公布:智汇屏+全局黑暗模式
  9. python数字组合算法_python猜数字游戏快速求解解决方案
  10. 利用计算机传播非法信息,非法侵入计算机信息系统罪如何处罚