验证回文串

简介: 验证回文串

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。

示例 1:

输入: "A man, a plan, a canal: Panama"
输出: true
解释:"amanaplanacanalpanama" 是回文串

示例 2:

输入: "race a car"
输出: false
解释:"raceacar" 不是回文串

本题需要用到的知识:
1.java.lang.String.charAt() 方法返回指定索引处的char值。索引范围是从0到length() - 1。

2.toLowerCase() 将一个大写字符转为小写字母

3.isLetterOrDigit() 判断是否是一个字母或者数字

1.双指针法

(回文的意思是顺序逆序都一样)先将字符串所有的字符都变成小写字母,头部指向一个指针,尾部指向一个指针,并进行字符判断,遇到除字符以外的就跳过直到遇到字符为止最后进行头尾字符判断。

class Solution {
    public boolean isPalindrome(String s) {
        if(s==null||s.length()==0)
        return true;
        s=s.toLowerCase();//把字母都变成大写
        for(int i=0,j=s.length()-1;i<j;i++,j--){
            //去掉除了字母之外的
            while(i<j&&!Character.isLetterOrDigit(s.charAt(i)))
                i++;
            while(i<j&&!Character.isLetterOrDigit(s.charAt(j)))
                j--;
            //判断头尾两个字符是否相同
            if(s.charAt(i)!=s.charAt(j))
                return false;
        }
        return true;
    }
}

2.递归

class Solution {
    public boolean isPalindrome(String s) {
        return isPalindromeHelper(s,0,s.length()-1);
    }
    public boolean isPalindromeHelper(String s,int left,int right){
        if(left>=right)
          return true;
        s=s.toLowerCase();
        while(left<right&&!Character.isLetterOrDigit(s.charAt(left)));
            left++;
        while(left<right&&!Character.isLetterOrDigit(s.charAt(right)));
            right--;
        return s.charAt(left)==s.charAt(right)&&isPalindromeHelper(s,++left,--right);
    }
}



相关文章
IDEA2019版 中文汉化方案
IDEA2019版 中文汉化方案
3285 0
|
消息中间件 Kafka Linux
Apache Kafka-初体验Kafka(03)-Centos7下搭建kafka集群
Apache Kafka-初体验Kafka(03)-Centos7下搭建kafka集群
275 0
|
数据可视化 算法 数据挖掘
Python量化投资实践:基于蒙特卡洛模拟的投资组合风险建模与分析
蒙特卡洛模拟是一种利用重复随机抽样解决确定性问题的计算方法,广泛应用于金融领域的不确定性建模和风险评估。本文介绍如何使用Python和EODHD API获取历史交易数据,通过模拟生成未来价格路径,分析投资风险与收益,包括VaR和CVaR计算,以辅助投资者制定合理决策。
734 15
|
开发框架 前端开发 JavaScript
在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件
在Winform界面使用自定义用户控件及TabelPanel和StackPanel布局控件
|
存储 Java 索引
java list集合相关介绍和方法使用操作
java list集合相关介绍和方法使用操作
275 1
|
安全 Linux 数据安全/隐私保护
Windows 部署 Elasticsearch + kibana 8.0 指南
Windows 部署 Elasticsearch + kibana 8.0 指南
|
数据可视化 测试技术 uml
【掌握绘图艺术】用PlantUML绘制完美UML图表,开发者的福音
【掌握绘图艺术】用PlantUML绘制完美UML图表,开发者的福音
3612 2
|
Java 开发者
JSP自定义标签
JSP自定义标签
143 0
|
存储 分布式计算 负载均衡
HBase的体系结构和架构原理
HBase的体系结构和架构原理
592 0
HBase的体系结构和架构原理
|
SQL 缓存 监控
presto-多租户资源管理
presto资源管理介绍 oomKiller presto会监控sql整个生命周期资源的使用(mem,cpu),worker也会周期性汇报自身mem使用状况,当worker的free memory降为0及以下时,触发集群oom逻辑。
3791 0
presto-多租户资源管理