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

AS7262六通道可见光传感器:从光谱原理到物联网色彩检测实战 光谱检测是嵌入式感知领域的关键技术,其核心原理是通过特定波长的滤光片分离光线并转换为电信号,从而实现对环境光或物体反射光的成分分析。这项技术的价值在于将复杂的光学分析简化为可编程读取的数字信号,极大降低了色彩检测在物联网和智能设备中的应用门槛。在智能农业、工业分拣、环境监测等场景中,精确的光谱数据能够驱动自动化决策,例如评估植物光照条件或识别物料颜色。本文以Adafruit AS7262传感器为例,深入解析其基于硅干涉滤光片的六通道设计,并通过Arduino与Python实战,演示如何快速构建从数据采集到可 阅读详情

这是悦乐书的第287次更新,第304篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第155题(顺位题号是680)。给定非空字符串s,最多可以删除一个字符。 判断它是否是回文。例如:

输入:“aba”
输出:true

输入:“abca”
输出:true
说明:可以删除字符“c”让其变为回文。

注意:该字符串仅包含小写字符a-z。 字符串的最大长度为50000。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

暴力解法。首先,如果字符串长度在2以内,直接返回true。然后利用StringBuilder类,借助其reverse方法,判断是否为回文。如果上面两种情况都不满足,就使用循环,每次对原字符串进行截取,来实现删掉一位的效果,组成新的字符串来判断是否为回文。但是此解法会超时。

public boolean validPalindrome(String s) {
    if (s.length() <= 2) {
        return true;
    }
    StringBuilder sb = new StringBuilder(s);
    String ss = sb.reverse().toString();
    if (s.equals(ss)) {
        return true;
    }
    for (int i=0; i<s.length(); i++) {
        if (i == 0) {
            if (isPalindrome(s.substring(1, s.length()))) {
                return true;
            }
        } else if (i < s.length()-1) {
            if (isPalindrome(s.substring(0, i)+ s.substring(i+1, s.length()))) {
                return true;
            }
        } else if (i == s.length()-1) {
            if (isPalindrome(s.substring(0, s.length()-1))) {
                return true;
            }
        }
    }
    return false;
}

public boolean isPalindrome(String ss){
    StringBuilder sb = new StringBuilder(ss);
    String sss = sb.reverse().toString();
    if (ss.equals(sss)) {
        return true;
    }
    return false;
}

03 第二种解法

第一种解法会超时,因为考虑了所有可能存在的多余的那个字符,但是我们真的需要考虑那么多吗?因为题目说了,只有一次删除字符的机会,那么我们在处理的时候,只处理一种情况就好,不符合就直接返回false。

依旧使用截取字符串的方式,如果遇到左右字符不对称的情况,就表示遇到了多余的字符,此时需要考虑是删掉左边的还是右边的?只要两个中符合一个就可以返回true,所以用或连接。将左右两字符不等的索引范围内的字符串进行截取,一个后面少截取一位,一个前面少截取一位,判断截取的字符串是否为回文。

public boolean validPalindrome(String s) {
    if (s.length() <= 2) {
        return true;
    }
    StringBuilder sb = new StringBuilder(s);
    String ss = sb.reverse().toString();
    if (s.equals(ss)) {
        return true;
    }
    for (int i=0; i<s.length()/2; i++) {
        if (s.charAt(i) != s.charAt(s.length()-1-i)) {
            return isPalindrome(s.substring(i, s.length()-1-i)) || isPalindrome(s.substring(i+1, s.length()-i));
        }
    }
    return true;
}

public boolean isPalindrome(String ss){
    StringBuilder sb = new StringBuilder(ss);
    String sss = sb.reverse().toString();
    if (ss.equals(sss)) {
        return true;
    }
    return false;
}

04 第三种解法

思路与第二种解法相似,但是比较轻便,借助双指针来实现。一左一右取字符比较,如果不等,表示遇到了需要删除的字符,同样分两种情况,删右边的一位和删左边的一位,再去判断这中间的子字符串是否为回文即可。

public boolean validPalindrome(String s) {
    // 使用双指针
    int left = 0;
    int right = s.length()-1;
    while (left < right) {
        // 如果左右指针所在的字符不相等,那就删掉右边的或者删掉左边的字符,再判断
        if (s.charAt(left) != s.charAt(right)) {
            return isPalindrome(s, left, right-1) || isPalindrome(s, left+1, right);
        }
        left++;
        right--;
    }
    return true;
}

// 辅助方法,判断一个字符串在(left,right)内是否为回文
public boolean isPalindrome(String s, int left, int right){
    while (left < right) {
        if (s.charAt(left) != s.charAt(right)) {
            return false;
        }
        left++;
        right--;
    }
    return true;
}

05 小结

算法专题目前已日更超过四个月,算法题文章155+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

STM32F105双路CAN通讯无法进入接收中断问题及解决方法 STM32F105RBT6双路CAN通讯无法进入接收中断问题及解决方法 阅读详情

相关推荐

SUMO仿真教程(5) —— 使用“XML“语言自定义构建路网

文章目录一.简要介绍1.node file2.edge file3.lane definitions(1)路段细分(2)邻近的对向车道(3)删除边或车道4.type file(1)简要概述(2)edge定义中引用type文件的示例(3)指定车辆种类的速度限制5.connections file(1)简要概述:(2)connection的属性参数(3)删除连接(4)设置连接的优先级(5)同一边的多个连接二.演示示例:1.自定义编写node file2.自定义编写edge file3.自定义编写type fil

weixin_50632459的博客 5017

leetcode valid-palindrome(Java)

leetcode题目 valid-palindrome – newcoder 26 验证回文字符串 – leetcode 125 题目描述 * Given a string, determine if it is a palindrome, * considering only alphanumeric(字母或数字) characters and ignoring cases. * For...

聚沙成塔 359

Multisim 14.0实战:从零搭建可调幅多波形信号发生器(附仿真文件)

本文详细介绍了如何在Multisim 14.0中从零搭建一个可调幅多波形信号发生器,涵盖方波、三角波和正弦波的生成原理与实现步骤。通过核心电路架构解析、关键参数设计及Multisim实战操作,帮助电子工程学习者和硬件工程师掌握信号发生器的设计与调试技巧,并提供仿真文件供实践验证。

nokia的博客 1074

java ecaf_LeetCode算法题-Valid Palindrome II(Java实现)

这是悦乐书的第287次更新,第304篇原创01 看题和准备今天介绍的是LeetCode算法题中Easy级别的第155题(顺位题号是680)。给定非空字符串s,最多可以删除一个字符。 判断它是否是回文。例如:输入:“aba”输出:true输入:“abca”输出:true说明:可以删除字符“c”让其变为回文。注意:该字符串仅包含小写字符a-z。 字符串的最大长度为50000。本次解题使用的开发工具是e...

weixin_42354972的博客 192

Latex里面关于作者名字显示有灰色; 二级+三级标题斜体;

Latex里面关于 作者名字显示有灰色; 二级+三级标题斜体,与正文的距离; 邮箱字体;ORCID字体设置(整理不易,请先关注,Thanks)

m0_61015717的博客 747

3.详解Labview串口通讯--从串口线连接到串口通讯保姆级教程

本文非常详细的介绍了使用Labview实现串口通讯,读完题主这篇文章,即使你是今天刚下载的Labview,也能熟练的连接并驱动串口执行,接下来和我一起学习下,记得关注并点赞不迷路

关注我,更多技术问题欢迎私聊~ 1万+

Leetcode——680. Valid Palindrome II

题目原址 https://leetcode.com/problems/valid-palindrome-ii/description/ 题目描述 Given a non-empty string s, you may delete at most one character. Judge whether you can make it a palindrome. Example1: ...

想当厨子的程序媛 362

Simulink仿真模块 - Data Type Conversion

Data Type Conversion将输入信号转换为指定的数据类型 在仿真库中的位置为: Simulink / 常用模块 Simulink / Signal Attributes 模型为: 说明 DataTypeConversion模块可将任何 Simulink®数据类型的输入信号转换为您指定的数据类型。 注意 要通过指定模块参数来控制输出数据类型,或者要从下游模块继承数据类型,使用DataTypeConversion模块。要...

jk_101的博客 2521

LeetCode-680. Valid Palindrome II [C++][Java]

Given a strings, returntrueif thescan be palindrome after deletingat most onecharacter from it.

贫道绝缘子的博客 286

用 ABAP OAuth 2.0 Client 直连 SAP SuccessFactors:从体系到落地的一条龙实践指南

ABAP SMI允许在后端对外部服务的OData端点进行定义与自定义化配置,并以受信连接的方式暴露给ABAP应用调用。它并不替代OAuth,而是扮演端点与自定义参数的集中化定义者,最终认证依旧由完成。对于需要在ABAP后端发起临时或补充型OData调用的场景,SMI是一个轻量而清晰的集成入口。scope的客户端应用已经完成注册,API DomainCompany ID、证书或密钥都已归档。ABAP的Profile与Client已建立并绑定,OA2C_GRANT可见绿色访问状态。SMI。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 286

用AList挂载网盘,无损看VR电影教程,无需下载到PICO头显本地!

用AList挂载网盘 + WebDAV直连头显,看片像拉本地一样流畅,不怕卡顿、不怕没空间,简直是VR看片刚需配置!别再用U盘传电影了,用AList + WebDAV,直接流畅看4K,看片效率翻倍,体验提升一个档次!

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 5546

[LeetCode] 680. Valid Palindrome II

Problems: https://leetcode.com/problems/valid-palindrome-ii/ Solution: 若不回文s [ i : j ],比较s [ i+1 : j ]和s [ i : j+1 ] class Solution { public boolean isPalindrome(String s) { for (int i = 0...

Renoler的博客 116

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Leetcode算法学习日志-680 valid Palindrome II

Leetcode-680 Valid Palindrome II 题目原文

Zarlove的博客 2593

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

leetcode 680. Valid Palindrome II 验证回文字符串 Ⅱ

如何判断回文(双指针),如何判断删除哪个字符

ln_ydc的专栏 273

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

leetcode 680. Valid Palindrome II 题解【C++/Java/Python】

leetcode 680 Valid Palindrome II 题解。

Frank Chan的窝 1126

[leetcode/lintcode 题解] 有效回文 II · Valid Palindrome II

【题目描述】 给一个非空字符串 s,你最多可以删除一个字符。判断是否可以把它变成回文串。 在线评测地址: https://www.lintcode.com/problem/valid-palindrome-ii/?utm_source=sc-csdn-fks 【样例】 样例 1: 输入: s = "aba" 输出: true 解释: 原本就是回文串 样例 2: 输入: s = "abca" 输出: true 解释: 删除 'b' 或 'c' 样例 3: 输入: s = "abc" 输出: false 解

littlemong的博客 194

LeetCode中的Valid Palindrome用Java实现

public class Solution {     public boolean isPalindrome(String s) {         char[] charArray = s.toCharArray(); List list = new ArrayList(); for(int i=0;i { if((charArray[i]=65)||(charArray[i]=9

snchenjt的专栏 588

Leetcode: Valid Palindrome

题目: Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.For example, “A man, a plan, a canal: Panama” is a palindrome. “race a car” is not a

给永远比拿愉快 987

LeetCode Valid Palindrome II

原题链接在这里:https://leetcode.com/problems/valid-palindrome-ii/description/ 题目: Given a non-empty strings, you may deleteat mostone character. Judge whether you can make it a palindrome. Example 1:...

weixin_30894389的博客 132

*LeetCode--Valid Palindrome II

Valid Palindrome II Given a non-empty strings, you may deleteat mostone character. Judge whether you can make it a palindrome. Example 1: Input: "aba" Output: True Example 2: Input: "abca...

weixin_30532987的博客 147

LeetCode125 Valid Palindrome

详细见:leetcode.com/problems/valid-palindrome Java Solution: github package leetcode; /* Given a string, determine if it is a palindrome, considering only alphanumeric characters and ig

zxwtry的博客 399

680. Valid Palindrome II

原题链接:https://leetcode.com/problems/valid-palindrome-ii/description/ 在做完第一道回文字符串校验题目之后这第二道题目就很简单了: /** * Created by clearbug on 2018/2/26. */ public class Solution { public static void main(Stri...

weixin_30758821的博客 71

LeetCode 680. 验证回文字符串 Ⅱ(Valid Palindrome II) 1

680. 验证回文字符串 Ⅱ 680. Valid Palindrome II 题目描述 给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 每日一算法2019/5/4Day 1LeetCode680. Valid Palindrome II 示例 1: 输入: "aba" 输出: True 示例 2: 输入: "abca" 输出: True 解释: 你可以删除c字符。 注意: ...

weixin_30721899的博客 136

Leetcode 680. Valid Palindrome II 验证回文字符串 Ⅱ

题目:给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。示例 1:输入: "aba" 输出: True 示例 2:输入: "abca" 输出: True 解释: 你可以删除c字符。 注意:字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。解题思路:使用了two pointer算法结合了递归算法,最后判断是否合法。代码实现:class Solution { ...

zhangzhetaojj的博客 553

LeetCode-Valid Palindrome II

LeetCode Java Valid Palindrome II

坟头草一米七五 239
上一篇: LeetCode算法题-Longest Continuous Increasing Subsequence(Java实现)
下一篇: LeetCode算法题-Baseball Game(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值