当前位置: 首页 > news >正文

LCR 019. 验证回文串 II

一、题目描述

给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。

示例 1:

输入: s = “aba”
输出: true
示例 2:

输入: s = “abca”
输出: true
解释: 可以删除 “c” 字符 或者 “b” 字符
示例 3:

输入: s = “abc”
输出: false

提示:

1 <= s.length <= 105
s 由小写英文字母组成

二、题目解析

1、中心扩散法

class Solution {public boolean validPalindrome(String s) {if(s == null || s.length() == 0){return false;}if(s.length() == 1){return true;}int n = s.length();if(isValidTarget(s)){return true;}for(int i = 0;i < n;i++){StringBuilder builder = new StringBuilder(s);builder.deleteCharAt(i);if(isValidTarget(builder.toString())){return true;}}return false;}public boolean isValidTarget(String s) {int n = s.length();Stack<Character> stack = new Stack();int i;for(i = 0;i < n / 2;i++){stack.push(s.charAt(i));}if(n % 2 == 1){i++;}for(;!stack.isEmpty() && i < n;i++){if(stack.pop() != s.charAt(i)){return false;}}return true;}
}

缺点:涉及删除字符操作操作复杂,运行超时
在这里插入图片描述
2、中心扩散法,在删除一个元素后不方便使用递归继续判断是否回文,考虑使用双指针从首尾开始遍历

class Solution {public boolean validPalindrome(String s) {return check(s,0,s.length()-1,true);}boolean check(String s,int i,int j,boolean flag){ // flag标识只有一次机会while (i<j){if(s.charAt(i)!=s.charAt(j)){if(!flag){// 已经去掉一个了,失败return false;}// 左边去掉boolean b1 = check(s, i, j - 1, false);// 右边去掉boolean b2 = check(s, i+1, j , false);return b1||b2; // 有一种成功即可}i++;j--;}return true;}
}

在这里插入图片描述

http://www.dtcms.com/a/343281.html

相关文章:

  • SpringCloudConfig配置文件本地化部署
  • 第5.1节:awk内置变量
  • MySQL诊断系列(5/6):表结构与元数据查询——快速掌握数据库“DNA”
  • 在pycharmIDE中如何快速掌握一个新模块的使用方法
  • 前端视频流处理从 0 到 “能跑”:可复制 Demo+WebGL/Worker 优化,覆盖会议 / 直播 / 监控场景
  • js来比较两个对象内容有误差异
  • 从源码中学习Java面向对象的多态
  • 通过自定义域名访问内网的web服务和tcp应用:内网ip到局域网外域名访问过程
  • 使用Docker部署Coze Studio开源版
  • (亲测)Centos7升级gcc 9
  • XTDrone——无人机基于2D激光Lidar进行二维运动规划(细节提醒以及相关报错解决)
  • 嵌入式-中断的概念,优先级,编程-Day17
  • 高效研发管理新选择:Codes 一站式平台深度解析
  • 6.Shell脚本修炼手册---grep命令使用指南
  • 定时器(Timer)和延时器
  • 文化遗产数字化对手持SLAM设备有哪些特殊要求?
  • 使用 X11 转发服务器界面
  • linux安装mysql ndb cluster
  • 牛客:链表分割算法详解
  • Java设计模式-享元模式
  • FreeRTOS学习笔记(三)--汇编指令
  • C ++代码学习笔记(一)
  • Layui 中的 iframe 详解与最佳实践
  • Linux笔记7——shell编程基础-1
  • SMT车间如何通过防静电监控系统提升产品质量
  • 206.反转链表
  • 【时时三省】vectorCAST 便捷使用技巧
  • 利用 Python 爬虫获取淘宝商品评论实战指南
  • 并发编程原理与实战(二十五)手写简易线程池实战,剖析线程状态转换过程
  • 【LINUX网络】UDP协议基础原理