680. Valid Palindrome II
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相关推荐
- 【回文串14】LeetCode 680. Valid Palindrome II
LeetCode 680. Valid Palindrome II Solution1:我的答案 复杂度是O(n)O(n)O(n),不算好啊.. 注意:对于c++中string对象常用的insert( ...
- LeetCode算法题-Valid Palindrome II(Java实现)
这是悦乐书的第287次更新,第304篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第155题(顺位题号是680).给定非空字符串s,最多可以删除一个字符. 判断它是否是回 ...
- C#LeetCode刷题之#680-验证回文字符串 Ⅱ(Valid Palindrome II)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3961 访问. 给定一个非空字符串 s,最多删除一个字符.判断是否 ...
- 【LeetCode 剑指offer刷题】字符串题12:Valid Palindrome(回文词系列)
[LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Valid Palindrome Given a string, determine if it is a pali ...
- LeetCode 125 Valid Palindrome(有效回文)(*)
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/5062 ...
- [LeetCode] Palindrome Number Valid Palindrome - 回文系列问题
题目概述: Determine whether an integer is a palindrome. Do this without extra space. 题目分析: 判断数字是否是回文 例如1 ...
- Leet Code OJ 125. Valid Palindrome [Difficulty: Easy]
题目: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ig ...
- valid Palindrome -- leetcode
125 Valid Palindrome Given a string, determine if it is a palindrome, considering only alphanumeric ...
- LeetCode OJ - Valid Palindrome
题目: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ig ...
最新文章
- 用 C 语言开发一门编程语言 — S-表达式
- python十四:全局变量(global)与局部变量与上一级变量(nonlocal)
- jQuery 图片滚动效果
- open live writer
- java jdbc修改_java----jdbc(数据库的添加,删除,修改,更新)
- java 补充日期_Java 9对可选的补充
- UML学习(一)-----用例图
- Kotlin入门(22)适配器的简单优化
- SQL注入学习part05:(结合sqli-libs学习:41-50关)
- Google、Facebook等不可错过的 AI 开源工具,你想要的都在这里!
- jQuery学习笔记(三):选择器总结
- POJ NOI MATH-7651 自来水供给
- redis 基本指令
- php inputcsv,php实现CSV文件导入和导出
- Windows Server 2012虚拟桌面分辨率支持列表
- 小米线刷包需要解压么_小米8官方原版线刷包rom刷机包下载_小米8线刷官方包的教程...
- HTML5桌面应用程序开发
- 芯洲 DCDC SCT2433STER参数可以P2P替代TPS5430DDAR,3.8V-40V输入,3.5A,低静态电流同步降压DCDC转换器
- python输入一个数组、以逗号为间隔_python-使用间隔掩码numpy数组
- 基于海康sdk回放下载
热门文章
- Codeforces Round #359 (Div. 2) D. Kay and Snowflake
- SoC嵌入式软件架构设计之二:虚拟内存管理原理、MMU硬件设计及代码分块管理...
- 测试综合技能的期末预测
- 每日程序C语言49-猴子分桃子问题
- code ./打不开vscode编辑器
- 2011---2013年杭电计算机历年研究生复试---笔试编程
- Django model、view拆分,添加service
- 《dinv into python》开始了解python
- 这份书单,给那些想学Hadoop大数据、人工智能的人
- python 全栈开发,Day51(常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍)...