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

LeetCode 验证回文串

验证回文串

CSDN话题挑战赛第2期
参赛话题:学习笔记

这是力扣 的125题,写一下思路
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。
则可以认为该短语是一个 回文串
字母和数字都属于字母数字字符
在这里插入图片描述

思路题解:

  • 什么是回文串?
    例如:
    abc cba 、 pgtr rtgp
    第一个字符和最后一个字符对应,第二个字符和倒数第二个字符对应,以此类推

  • 条件
    有效字符只有 字母数字字符,其他都不是有效字符
    要忽略字符的大小写

第一步:
要先从字符串中判断是否为有效字符

public boolean isEffective(char ch){
         // 判断是否是 字母 和数字
        if(Character.isLetter(ch) || Character.isDigit(ch)){
            return true;
        }
        return false;
        // 上面和下面二种方法都可以使用
        //return Character.isLetterOrDigit(ch);
    }

Character.isLetter( ) 是用来判断是否是字母
Character.isDigit( ) 是用来判断是否是数字字符
Character.isLetterOrDigit( ) 是判断当前的字符是否是字母或者是数字字符

第二步:
忽略大小写,可以直接使用toLowerCase()把所有的字符转换为小写字符
最后一步就是判断是否相等

public boolean isPalind(String s){
        s = s.toLowerCase();//把全部字符转换为小写字母
        int left = 0;
        int right = s.length()-1;
        while(left < right){

            while(left < right && !isEffective(s.charAt(left))){
                left++;//判断left是否为有效字符,不是就跳过
            }
            while(left < right && !isEffective(s.charAt(right))){
                right--;//判断right是否为有效字符,不是就跳过
            }
            if(s.charAt(left) != s.charAt(right)){
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
  • 最后判断是否相等可以使用二个下标leftright,分别指向第一个元素和最后一个元素
    它们的执行条件必须是 left 小于 right,判断字符是否有效使用之前写好的isEffective
    charAt 是从字符串中获取一个字符
    接下来就是使用isEffective来获取有效字符进行判断二个字符是否相等
    不相等直接返回 flase ,相等就 left++ right--,判断下一个字符
    直到最后跳出循环返回 true

源代码

public boolean isEffective(char ch){
         // 判断是否是 字母 和数字
        if(Character.isLetter(ch) || Character.isDigit(ch)){
            return true;
        }
        return false;

        //return Character.isLetterOrDigit(ch);
    }

    public boolean isPalind(String s){
        s = s.toLowerCase();//把全部字符转换为小写字母
        int left = 0;
        int right = s.length()-1;
        while(left < right){

            while(left < right && !isEffective(s.charAt(left))){
                left++;//判断left是否为有效字符,不是就跳过
            }
            while(left < right && !isEffective(s.charAt(right))){
                right--;//判断right是否为有效字符,不是就跳过
            }
            if(s.charAt(left) != s.charAt(right)){
                return false;
            }
            left++;
            right--;
        }
        return true;
    }

相关文章:

  • 基于STM32单片机和AD9850的智能DDS函数信号发生器
  • Java高并发编程实战2,原子性、可见性、有序性,傻傻分不清
  • 【机器学习】李宏毅——AE自编码器(Auto-encoder)
  • STM32CUBEMX开发GD32F303(14)----IIC之配置OLED
  • TCP三次握手建立连接和四次挥手释放连接
  • 【牛客刷题-算法】NC7 买卖股票的最好时机(一)
  • 牛客网面试必刷TOP101之——判断对称二叉树、求镜像二叉树与合并二叉树
  • JavaSE笔记(二)重制版
  • 【LabVIEW专题】LabVIEW 通过串口进行Modbus协议通信
  • 软件分享-
  • java扶贫平台计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  • 十年数据库专家,呕心力作MySQL技术精粹,薪资直涨3K其实很轻松
  • D. Empty Graph #813 div2
  • 02 NLP合集-神经网络从0开始推理-一个间的神经网路的预测-没有backforward的情况下
  • 驱动程序开发:SPI设备驱动
  • @angular/forms 源码解析之双向绑定
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript异步流程控制的前世今生
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Median of Two Sorted Arrays
  • SOFAMosn配置模型
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 回顾2016
  • 回流、重绘及其优化
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 使用 Docker 部署 Spring Boot项目
  • 我从编程教室毕业
  • 项目管理碎碎念系列之一:干系人管理
  • 延迟脚本的方式
  • 一个JAVA程序员成长之路分享
  • 一文看透浏览器架构
  • 智能网联汽车信息安全
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • (2020)Java后端开发----(面试题和笔试题)
  • (C语言)字符分类函数
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (一)appium-desktop定位元素原理
  • ***监测系统的构建(chkrootkit )
  • .describe() python_Python-Win32com-Excel
  • .net core控制台应用程序初识
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [20150904]exp slow.txt
  • [AIGC codze] Kafka 的 rebalance 机制
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大
  • [js]- 两个对象的合并(Object.assign)
  • [leetcode]Flatten Binary Tree to Linked List
  • [LeetCode]-Integer to Roman 阿拉伯数字转罗马数字
  • [Linux] 进程间通信基础