面对该题我们最最容易想到的算法就是暴力,我一开始也是没注意看该题的数据大小

直接暴力——

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

下面给出我的反面教材

class Solution {
public://暴力bool check(string s){for(int i=0,j=s.length()-1;i<j;i++,j--){if(s[i]!=s[j]){return false; }}return true;}bool validPalindrome(string s) {if(check(s))//先判断是不是回文串{return true;}else{for(int i=0;i<s.length();i++){string other=s;other.erase(other.begin()+i);//枚举每一个字符作为删除的那一个if(check(other)){return true;}continue;}}return false;}
};

实际上,我们不妨换一种思路

我们在判断一个字符串是不是回文串的时候,如果不是回文串,我们的判断条件是双指针指向的两个元素不同,其实这里面还蕴含着另外一种情况,即删除一个字符后是回文串的情况!!!

我们会发现其实如果一个字符串删除一个字符之后是回文串的话,那么删除字符的出现的情况会有两种,一种是删除左边那个字符而右边不变,一种是删除右边那个字符而左边不变,那么我们只需判断删除后两个指针之间的字符串是不是回文串就行了!!!

接下来请看代码实现:

class Solution {
public:bool check(char *strbegin,char *strend){for(;strbegin<strend;strbegin++,strend--){if((*strbegin)!=(*strend)){return false;}}return true;}bool validPalindrome(string s) {for(int i=0,j=s.length()-1;i<j;i++,j--){if(s[i]==s[j]){continue;}else{return (check(&s[i+1],&s[j])||check(&s[i],&s[j-1]));//只有删除任何一个之后}                                                       //都不是回文串的时候}                                                           //才不是回文串return true;}
};

验证回文字符串 II(贪心+双指针)相关推荐

  1. 力扣--125验证回文串/680验证回文字符串II

    125验证回文串 python代码 常规 def isPalindrome(s):if len(s) < 2:return TruesList = []s = s.lower()print(s) ...

  2. 把数组排成最小的数字,划分字母区间,最小覆盖子串,验证回文字符串II

    面试题45:把数组排成最小的数字 输入一个正整数数组,把数组里所有的数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.这里自定义了一个排序规则. class Solution { publi ...

  3. 2022-1-13 Leetcode 680.验证回文字符串 II

    class Solution {public:bool validPalindrome(string s) {int n = s.size();// for(int i = 0;i < n/2; ...

  4. [Leedcode][JAVA][第680题][验证回文字符串Ⅱ][贪心][递归]

    [问题描述][第680题][验证回文字符串Ⅱ][简单] 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串.示例 1:输入: "aba" 输出: True 示例 2 ...

  5. 680. 验证回文字符串 Ⅱ

    680. 验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: s = "aba" 输出: true 示例 2: 输入: s ...

  6. 1706. 球会落何处 / 680. 验证回文字符串 Ⅱ

    1706. 球会落何处[中等题][每日一题] 思路: 单看每一行,必须是小球所在的列跟它左右两侧至少有一侧的挡板方向相同才能使小球滚动下去,否则就卡住了,具体点说就是,设小球当前所在列下标为i,那么如 ...

  7. leetcode系列--680.验证回文字符串 Ⅱ

    leetcode系列–第680题.验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 输入: s = "abca" 输出: true 解释: ...

  8. 680. 验证回文字符串 Ⅱ golang

    题目 验证回文字符串 Ⅱ 给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "a ...

  9. 20190821:(leetcode习题)验证回文字符串

    验证回文字符串 题目 大致思路 代码实现 题目 大致思路 首先明确什么是回文字符串: 正序和反序读,是一回事的句子,就是回文字符串 当然,你得把里面除了数字和字母的元素去掉,比如逗号啊,句号啊,之类的 ...

最新文章

  1. Lesson 14.1 数据归一化与Batch Normalization理论基础
  2. E. 存储过程(procedure)
  3. 网络工程师需要具备哪些素质或专业技术
  4. oracle+查询主机地址,oracle函数:获取Internet主机名和ip地址
  5. 302状态码_http状态码是什么?301 302 404的SEO应用场景
  6. MySQL 如何实现 Oracle 的 row_number() over() 分组排序功能
  7. 047 一维数据的格式化和处理
  8. D3 selectselectAll
  9. 微服务升级_SpringCloud Alibaba工作笔记0001---新一代网关spring gateway和zuul的关系说明
  10. Java String.indexOf() 函数用法小结
  11. 斗罗大陆服务器维护,04.28《斗罗大陆:武魂觉醒》停服维护公告(修罗1-7服先行服)...
  12. 到2020年,将有60%的工作会被人工智能取代?
  13. 2017大数据与分析创新峰会9月6-7日在上海宝华万豪酒店拉开帷幕
  14. win11家庭版如何彻底关闭病毒实时保护
  15. 杭电OJ 1181(C++)
  16. python 地图偏移_python 地图经纬度转换、纠偏的实例代码 百度地图经纬度web纠偏怎么用...
  17. 7.9模拟比赛解题报告
  18. 2016.9.8面试水笔
  19. 贝叶斯网专题12:参数学习之贝叶斯估计
  20. 【历史上的今天】5 月 27 日:Node.js 诞生;WordPress 首次发布;MIT 关闭“旋风”计算机

热门文章

  1. 微信小程序的各种功能
  2. 计算机电源寿命,影响电脑寿命的几个重要方面
  3. 动规 - 最大子矩阵问题
  4. 【论文解读】关于基于视觉无人机自主降落平台的论文梳理
  5. D3D中2D图片的绘制
  6. PYNQ框架HLS开发流程备忘
  7. Word文档中如何修改设置行距
  8. 兔子c语言程序,可爱的C语言程序。....兔子问题...斐波那契数列
  9. 易基因 | 宏基因组测序带给了我们什么?
  10. VFS中的read/write系统调用