Title

给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。

示例 1:

输入: “aba”
输出: True

示例 2:

输入: “abca”
输出: True
解释: 你可以删除c字符。

Solve

贪心算法:

考虑最朴素的方法:首先判断原串是否是回文串,如果是,就返回 true;如果不是,则枚举每一个位置作为被删除的位置,再判断剩下的字符串是否是回文串。这种做法的渐进时间复杂度是 O(n2) 的,会超出时间限制。

换一种想法:首先考虑如果不允许删除字符,如何判断一个字符串是否是回文串?

常见的做法是使用双指针:定义左右指针,初始时分别指向字符串的第一个字符和最后一个字符,每次判断左右指针指向的字符是否相同,如果不相同,则不是回文串;如果相同,则将左右指针都往中间移动一位,直到左右指针相遇,则字符串是回文串。

在允许最多删除一个字符的情况下,同样可以使用双指针,通过贪心算法实现。

初始化两个指针 low 和 high 分别指向字符串的第一个字符和最后一个字符,每次判断两个指针指向的字符是否相同,如果相同,则更新指针,令 low = low + 1 和 high = high - 1,然后判断更新后的指针范围内的子串是否是回文字符串;如果两个指针指向的字符不同,则两个字符中必须有一个被删除,此时我们就分成两种情况:即删除左指针对应的字符,留下子串 s[low + 1], s[low + 1], …, s[high],或者删除右指针对应的字符,留下子串 s[low], s[low + 1], …, s[high - 1]。当这两个子串中至少有一个是回文串时,就说明原始字符串删除一个字符之后就以成为回文串。

Code

class Solution:def validPalindrome(s):if s == s[::-1]:return Truefor i in range(int(len(s) / 2)):if s[i] != s[-i - 1]:return s[i + 1:-i if -i else None] == s[i + 1:-i if -i else None][::-1] or s[i:-i - 1] == s[i:-i - 1][:: -1]

680. Valid Palindrome II相关推荐

  1. 【回文串14】LeetCode 680. Valid Palindrome II

    LeetCode 680. Valid Palindrome II Solution1:我的答案 复杂度是O(n)O(n)O(n),不算好啊.. 注意:对于c++中string对象常用的insert( ...

  2. LeetCode算法题-Valid Palindrome II(Java实现)

    这是悦乐书的第287次更新,第304篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第155题(顺位题号是680).给定非空字符串s,最多可以删除一个字符. 判断它是否是回 ...

  3. C#LeetCode刷题之#680-验证回文字符串 Ⅱ​​​​​​​(Valid Palindrome II)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3961 访问. 给定一个非空字符串 s,最多删除一个字符.判断是否 ...

  4. 【LeetCode 剑指offer刷题】字符串题12:Valid Palindrome(回文词系列)

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Valid Palindrome Given a string, determine if it is a pali ...

  5. LeetCode 125 Valid Palindrome(有效回文)(*)

    版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/5062 ...

  6. [LeetCode] Palindrome Number Valid Palindrome - 回文系列问题

    题目概述: Determine whether an integer is a palindrome. Do this without extra space. 题目分析: 判断数字是否是回文 例如1 ...

  7. Leet Code OJ 125. Valid Palindrome [Difficulty: Easy]

    题目: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ig ...

  8. valid Palindrome -- leetcode

    125 Valid Palindrome Given a string, determine if it is a palindrome, considering only alphanumeric ...

  9. LeetCode OJ - Valid Palindrome

    题目: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ig ...

最新文章

  1. 用 C 语言开发一门编程语言 — S-表达式
  2. python十四:全局变量(global)与局部变量与上一级变量(nonlocal)
  3. jQuery 图片滚动效果
  4. open live writer
  5. java jdbc修改_java----jdbc(数据库的添加,删除,修改,更新)
  6. java 补充日期_Java 9对可选的补充
  7. UML学习(一)-----用例图
  8. Kotlin入门(22)适配器的简单优化
  9. SQL注入学习part05:(结合sqli-libs学习:41-50关)
  10. Google、Facebook等不可错过的 AI 开源工具,你想要的都在这里!
  11. jQuery学习笔记(三):选择器总结
  12. POJ NOI MATH-7651 自来水供给
  13. redis 基本指令
  14. php inputcsv,php实现CSV文件导入和导出
  15. Windows Server 2012虚拟桌面分辨率支持列表
  16. 小米线刷包需要解压么_小米8官方原版线刷包rom刷机包下载_小米8线刷官方包的教程...
  17. HTML5桌面应用程序开发
  18. 芯洲 DCDC SCT2433STER参数可以P2P替代TPS5430DDAR,3.8V-40V输入,3.5A,低静态电流同步降压DCDC转换器
  19. python输入一个数组、以逗号为间隔_python-使用间隔掩码numpy数组
  20. 基于海康sdk回放下载

热门文章

  1. Codeforces Round #359 (Div. 2) D. Kay and Snowflake
  2. SoC嵌入式软件架构设计之二:虚拟内存管理原理、MMU硬件设计及代码分块管理...
  3. 测试综合技能的期末预测
  4. 每日程序C语言49-猴子分桃子问题
  5. code ./打不开vscode编辑器
  6. 2011---2013年杭电计算机历年研究生复试---笔试编程
  7. Django model、view拆分,添加service
  8. 《dinv into python》开始了解python
  9. 这份书单,给那些想学Hadoop大数据、人工智能的人
  10. python 全栈开发,Day51(常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍)...