ValidPalindrome(回文字符串的判断)

2023-11-02

/**
 * @author LemonLin
 * @Description :StringValidPalindrome
 * @date 2019/5/9-16:40
 *
 * Given a string, determine if it is a palindrome, considering only alphanumeric characters and
 * ignoring cases.
 * 直译:给你一个字符串, 判定它是否是回文(只统计字母、数字,其他字符请忽略)。
 * Note: For the purpose of this problem, we define empty string as valid palindrome.
 * 定义空字符串也是有效的回文
 * Example 1:
 *      Input: "A man, a plan, a canal: Panama"
 *      Output: true
 *Example 2:
 *      Input: "race a car"
 *      Output: false
 * 解题思路:采用二分法,一个指针从左边遍历,一个从右边遍历,跳过非字母和非数字,当遍历到中点依然相同那
 * 就是回文。时间复杂度O(n), 空间复杂度O(1)
 *
 */
public class StringValidPalindrome {
    public boolean isPalindrome(String s) {
        if(s.isEmpty()){
            return true;
        }
        char cHead,cTail;
        int head = 0, tail = s.length()-1;
        while (head<=tail){
            //全部转换为小写进行比较,另外可以利用String.charAt把字符串当做字符数组。
            cHead = Character.toLowerCase(s.charAt(head));
            cTail = Character.toLowerCase(s.charAt(tail));
            // 接下来的判断是需要跳过不是字符和数字的字符
            if (!isLetterOrDigit(cHead)){
                head++;
            }else if (!isLetterOrDigit(cTail)){
                tail--;
            }else {
                if (cHead== cTail){
                    head++;
                    tail--;
                }
                else return false;
            }
        }
        return true;
    }
    //判断字符是否是字母或者数字
    public boolean isLetterOrDigit(char c){
        if ((c >= 'A' && c <= 'Z')||(c >='a' && c<='z')||(c>='0'&&c<='9'))
            return true;
        return false;
    }
    public static void main(String[] args) {
        StringValidPalindrome stringValidPalindrome =new StringValidPalindrome();
        String test = "A man, a plan, a canal: Panama";
        String test2 =" ";
        boolean result = stringValidPalindrome.isPalindrome(test2);
        System.out.println(result);
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ValidPalindrome(回文字符串的判断) 的相关文章

随机推荐

  • C#中对sqlserver进行增删改查

    1 添加引用 using System Data using System Data SqlData 建立于数据库的连接 string sqlconnection data source 注解1 database 注解2 uid 注解3 p
  • 2021美赛 MCM\ICM D题

    自古以来 音乐就已成为人类社会的一部分 已成为文化遗产的重要组成部分 为了理解音乐在人类集体经验中所扮演的角色 我们被要求开发一种量化音乐发展的方法 在创作新音乐时 有许多因素会影响艺术家 包括其天赋的创造力 当前的社会或政治事件 使用新乐
  • UE4/UE5 虚幻引擎,DDC(DerivedDataCache)派生数据缓存

    1 编辑器偏好设置 gt 全局 gt 共享派生数据缓存 作用 同一个项目编译结束之后 会把缓存数据存储到共享文件夹中 后续其他团队成员打开项目的时候 就不需要再次编译了
  • 原生wx小程序用vant组件自定义底部导航

    1 在根目录中创建custom tab bar 新建page index 2 在app json或index json中引入vant组件 usingComponents van tabbar vant weapp tabbar index
  • Mybatis配置找不到resources错误的解决

    问题 导入Mybatis框架和进行基础的查询操作 在网上找了教程配置后运行总会有找不到resources错误 找不到mybatis下的 解决方案 反复查询配置文件 发现是地址标红 不能导入 在setting DTDS中添加 http myb
  • Fiddler抓取https如何设置

    来源 http t istester com 3000 istester 21Day src master Fiddler V1 0 21Day Fiddler 05 md
  • matlibplot之条形图

    文本以及后续的系列文章中均会使用到numpy这个库 numpy是Python的一种开源的数值计算扩展 主要用来生产一些随机数作为绘图的原始数据 具体和安装matplotlib类似 可以参考安装Matplotlib这篇文章 文章目录 条形图
  • 【threejs加载器】加载gltf模型及压缩模型

    加载obj过程请参考如下两篇 threejs基础 使用OBJLoader 加载obj模型 threejs基础 使用MTLLoader 加载材质OBj模型 1 加载gltf模型 效果如下 第一步 引入GLTFLoader import GLT
  • Pandas日期数据处理函数 to_datetime()

    to datetime函数可以用来批量处理日期数据转换 可以将日期数据转换成你需要的各种格式 如 13 oct 18 10 13 18 2018 10 13 2018 10 13 20181013 转换成 2018 10 13 to dat
  • MySQL事务基础知识

    前言 学习 导流 小林coding 事务篇 学习意义 理解MySQL如何去处理并发问题 借鉴其思想 存储作为应用的关键能力 而事务作为关系型数据库的关键概念 掌握很必要 也为分布式事务学习做奠基 相关说明 该篇博文是个人阅读的重要梳理 仅做
  • git 回滚某个文件

    git checkout 可以丢弃工作区的修改 但是不能丢弃暂存区的修改 注意要加 否则就变成 切换分支 命令 git reset HEAD 可以丢弃暂存区的修改 unstage 但是不会自动同步撤销工作区的修改 如果希望彻底丢弃暂存区以及
  • 【C++】哈希算法

    目录 1 哈希映射 1 1哈希的概念 1 2哈希冲突 1 3哈希函数 1 31直接定值法 1 32除留余数法 2 解决哈希冲突 2 1闭散列法 2 11线性探测 2 12二次探测 3代码实现 3 1状态 3 2创建哈希节点类 3 21哈希表
  • 旅游攻略APP外包开发功能

    旅游攻略APP是帮助旅行者计划和享受旅行的工具 下面列出了一些常见的旅游攻略APP功能 以及在上线这类应用时需要注意的问题 希望对大家有所帮助 北京木奇移动技术有限公司 专业的软件外包开发公司 欢迎交流合作 常见功能 目的地信息 提供有关各
  • 表维护视图的F4增强

    利用SE11创建表维护视图后 我们可以通过SE51修改自动生成的屏幕来编写自定义F4以及其它事件 首先需要找到相应的FUNCTION GROUP SE80进入FUNCTION GROUP的编辑页面 修改屏幕的PBO PAI事件 出了MDL开
  • FairMOT论文阅读笔记

    Abstract 近些年目标检测和Re ID有很大的发展 但是没有人在单个网络中联合这两个任务 由于re ID任务没有公平的学习 这导致了大量id的转换 不公平之处在于两个方面 1 他们将重新身份识别视为次要任务 其准确性在很大程度上取决于
  • ubuntu ip地址修改

    图形界面化修改 新版本的修改方式 vim etc netplan 00 installer config yaml This is the network config written by subiquity network ethern
  • 常用 c++ github 项目汇总

    GitHub fmtlib fmt A modern formatting library GitHub gabime spdlog Fast C logging library
  • PS色彩原理

    色彩 六大色调的构成 纯色调 优点 刺激 直接 活力促销 缺点 廉价 缺少品质感 明色调 优点 年轻 阳光 活力 明朗 干净 缺点 缺少档次 淡色调 优点 天真 女性 纤细 轻快 高档 女性专属色 缺点 单薄 软弱 女性专属色 白色调 优点
  • mac os 10.12安全性与隐私没有任何来源的解决办法

    到mac os10 12后 有很多签名不对的软件安装会装不了 比如 解决办法如下 在命令行中输入 sudo spctl master disable 这样就可以在系统偏好设置 安全性与隐私中看到任何来源了 这样像很多本来安装不了的软件又可以
  • ValidPalindrome(回文字符串的判断)

    author LemonLin Description StringValidPalindrome date 2019 5 9 16 40 Given a string determine if it is a palindrome con