java数据结构与算法刷题-----LeetCode 680. 验证回文串 II

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846

在这里插入图片描述

思路:双指针

详情见代码注释
在这里插入图片描述

class Solution {
    //贪心+双指针(双指针用来两端遍历,而贪心,就是若两端相等,去除两端后,剩下的是回文串,整体就是回文串)
    //通过双指针依次两端比对
    //因为可以最少删除一个元素
    //当发生两端不匹配时,从两端调一个删除,继续比对即可
    public boolean validPalindrome(String s) {
        int length = s.length();
        int left = 0, right = length-1;
        // char arr[] = s.toCharArray();
        while(left<right){
            char c1 = s.charAt(left),c2 = s.charAt(right);
            //如果不相等,就删除一个,再次判断
            //有两种情况,删除左边剩下的继续,或者删除右边,剩下的继续
            if(c1 != c2) return validPalindrome(s,left+1,right)||validPalindrome(s,left,right-1);
            //相等就继续比较下一对
            left++;
            right--;
        }
        return true;
    }
    //当两端不匹配时,可以删除一个元素继续再比对一次
    public boolean validPalindrome(String s,int left,int right) {
        while(left<right){
            char c1 = s.charAt(left),c2 = s.charAt(right);
            if(c1 != c2) return false;
            left++;
            right--;
        }
        return true;
    }
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/276303.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

apisix 插件配置 未生效 未起作用

插件配置完成&#xff0c;却没生效&#xff0c;请检查插件的启用状态是否是启用状态&#xff0c; 以某个route配置的限速插件&#xff08;limit-req&#xff09;为例 1.打开dashboad-->路由-->某个路由-->更多-->查看&#xff0c; 查看配置&#xff0c;实际未启用…

C语言之进制转换

C语言之进制转换 一、引言二、十进制与二进制、八进制、十六进制三、二进制与八进制、十六进制四、八进制与十六进制 一、引言 在C语言中&#xff0c;经常使用的整数的进制有十进制、二进制、十六进制&#xff08;在C语言中以0x或0X为前缀&#xff09;、八进制&#xff08;在C…

PTA-感染人数

设某住宿区域是一个nn的方阵&#xff0c;方阵中的每个小方格为一个房间&#xff0c;房间里可能住一个人&#xff0c;也可能空着。第一天&#xff0c;某些房间中住着的人得了一种高传染性的流感&#xff0c;以后每一天&#xff0c;得流感的人会使其邻居&#xff08;住在其上、下…

【重点!!!】【贪心】45.跳跃游戏II

题目 法1&#xff1a;贪心 贪心是最优解法&#xff0c;必须掌握&#xff01;重点理解&#xff0c;看B站视频辅助&#xff01;&#xff01;&#xff01; 在具体的实现中&#xff0c;我们维护当前能够到达的最大下标位置&#xff0c;记为边界。我们从左到右遍历数组&#xff0…

对接第三方统一登录接口时,调用对方接口在Nginx上报405响应码错误解决方法

1、先看我的Nginx的配置文件&#xff08;业务入口局部配置&#xff09; 2、正确的解决方式是在location代码块中添加一行代码&#xff0c;【error_page 405 200 $request_uri;】如下所示&#xff1a; 3、接口测试 4、备注&#xff1a;如果报以下错误&#xff0c;是因为Nginx中…

【多线程及高并发 三】volatile synchorized 详解

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是若明天不见&#xff0c;BAT的Java高级开发工程师&#xff0c;CSDN博客专家&#xff0c;后端领域优质创作者 &#x1f4d5;系列专栏&#xff1a;多线程及高并发系列 &#x1f4d5;其他专栏&#xff1a;微服务框架系列、…

【快速全面掌握 WAMPServer】04.人生初体验

网管小贾 / sysadm.cc 我们在前面的教程中为小伙伴们详细地介绍了 WampServer 的安装方法&#xff0c;相信大家对于如何安装应该已经有了一个比较完全的掌握。 在完全掌握安装方法之后&#xff0c;我们还可以更加便捷地使用我为大家提供的一键安装批处理程序来快速搞定安装部署…

apache 文件读取命令执行(CVE-2021-41773)

漏洞描述&#xff1a; CVE-2021-41773 漏洞是在 9 月 15 日发布的 2.4.49 版中对路径规范化所做的更改引入到 Apache HTTP Server 中的。此漏洞仅影响具有“require all denied”访问权限控制配置被禁用的Apache HTTP Server 2.4.49 版本。成功的利用将使远程攻击者能够访问易…

【Mybatis】深入学习MyBatis:CRUD操作与动态SQL实战指南

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; Mybatis ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 一基本用法 1 CRUD操作 1. 增加&#xff08;Create&#xff09; 2. 查询&#xff08;Read&#xff09; 3. 更新&#x…

endpoints控制器源码解析

endpoints controller 的实现原理 本文从源码的角度分析KubeController Attachdetach相关功能的实现。 本篇kubernetes版本为v1.27.3。 kubernetes项目地址: https://github.com/kubernetes/kubernetes controller命令main入口: cmd/kube-controller-manager/controller-mana…

10分钟带你了解分布式系统的补偿机制

我们知道&#xff0c;应用系统在分布式的情况下&#xff0c;在通信时会有着一个显著的问题&#xff0c;即一个业务流程往往需要组合一组服务&#xff0c;且单单一次通信可能会经过 DNS 服务&#xff0c;网卡、交换机、路由器、负载均衡等设备&#xff0c;而这些服务于设备都不一…

在微服务中如何实现全链路的金丝雀发布?

目录 1. 什么金丝雀发布&#xff1f;它有什么用&#xff1f; 2.如何实现全链路的金丝雀发布 2.1 负载均衡模块 2.2 网关模块 2.3 服务模块 2.3.1 注册为灰色服务实例 2.3.2 设置负载均衡器 2.3.3 传递灰度发布标签 2.4 其他代码 2.4.1 其他业务代码 2.4.2 pom.xml 关…

出现频率高达80%的软件测试常见面试题合集(内附详细答案)

最近看到网上流传着各种面试经验及面试题&#xff0c;往往都是一大堆技术题目贴上去&#xff0c;但是没有答案。 为此我业余时间整理了这份软件测试基础常见的面试题及详细答案&#xff0c;望各路大牛发现不对的地方不吝赐教&#xff0c;留言即可。 01 软件测试理论部分 1.1…

SpingBoot的项目实战--模拟电商【1.首页搭建】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于SpringBoot电商项目的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.项目背景及技术点运用 …

你知道继电保护测试仪的价格是多少吗?

继电保护测试仪是电气设备检测中经常使用的检测仪器。它能准确、快速地检测到每个继电保护装置的一些潜在故障和问题&#xff0c;帮助电力检测工人锁定问题点&#xff0c;使继电保护装置能够正常工作&#xff0c;保护电力需求。继电保护测试仪贵吗&#xff1f;哪些因素影响价格…

链表:如何利用“假头,新指针,双指针”解决链表问题

Java学习面试指南&#xff1a;https://javaxiaobear.cn 链表是一种线性数据结构&#xff0c;其中的每个元素实际上是一个单独的对象&#xff0c;而所有对象都通过每个元素中的引用字段链接在一起。 链表是一种物理存储单元上非连续、非顺序的存储结构&#xff0c;其物理结构不能…

C# Winform教程(二):基础窗口程序

1、介绍 winform应用程序是一种智能客户端技术&#xff0c;我们可以使用winform应用程序帮助我们获得信息或者传输信息等。 2、常用属性 Name&#xff1a;在后台要获得前台的控件对象&#xff0c;需要使用Name属性。 Visible&#xff1a;指示一个控件是否可见、 Enable&…

基于动态窗口的航线规划

MATLAB2016b可以运行 % ------------------------------------------------------------------------- % File : DWA 算法 % Discription : Mobile Robot Motion Planning with Dynamic Window Approach % Author :Yuncheng Jiang % License : Modified BSD Software License A…

MySQL按月分片

一、按照月分片 使用场景为按照自然月来分片,每个自然月为一个分片,但是一年有12个月,是不是要有12个数据节点才行呢?并不是。例如我现在只有三个分片数据库,这样就可以1月在第一个数据分片中,2月在第二个数据分片中,3月在第三个数据分片中,当来到4月的时候,就会重新开…

echarts中给图表X轴和Y轴加单位以及给tooltip(提示框)增加单位

左边没有单位&#xff0c;右图是增加单位的效果。 1.x轴y轴设置单位 增加单位不管是x轴还是y轴都可以设置name字段&#xff0c;设置完name后效果是红色箭头效果。如果想要蓝色箭头效果可以使用x轴y轴的都有的 axisLabel 属性里面有formatter配置项&#xff0c;formatter支持字…