冲冲冲

125. 验证回文串

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

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

示例 1:

输入: "A man, a plan, a canal: Panama"

输出: true

示例 2:

输入: "race a car"

输出: false

my solution:
class Solution {
public boolean isPalindrome(String s) {
//判空
if ("".equals(s)) return true;
//过滤非字母非数字字母
String filterS = s.replaceAll("[^A-Za-z0-9]","");
//颠倒字符串
String reverseS = new StringBuilder(filterS).reverse().toString();
//进行比较
return filterS.equalsIgnoreCase(reverseS);
}
}
other solutions:
// 用俩指针遍历到中间
class Solution {
public boolean isPalindrome(String s) {
if (s.isEmpty()) return true;
char chead,ctail;
int head = 0;
int tail = s.length()-1;
while (head < tail) {
chead = s.charAt(head);
ctail = s.charAt(tail);
if (!Character.isLetterOrDigit(chead)) {
head ++;
}else if (!Character.isLetterOrDigit(ctail)) {
tail --;
}else{
if (Character.toLowerCase(chead)!=Character.toLowerCase(ctail)) {
return false;
}
head ++;
tail --;
}
}
return true; }
}
class Solution {
public boolean isPalindrome(String s) {
//判空
if("".equals(s)) return true;
//整两指针
int head = 0;
int tail = s.length()-1;
//进行判断
while(head < tail){
while(head < tail && !Character.isLetterOrDigit(s.charAt(head))){
head ++;
}
while(head < tail && !Character.isLetterOrDigit(s.charAt(tail))){
tail --;
}
if(Character.toLowerCase(s.charAt(head))!=Character.toLowerCase(s.charAt(tail))){
return false;
}
head ++;
tail --; }
return true;
}
}
// 自己建立字母和数字字符的映射,可以提升速度
class Solution {
private static final char[]charMap = new char[256];
static{
for(int i=0;i<10;i++){
charMap[i+'0'] = (char)(1+i); // numeric
}
for(int i=0;i<26;i++){
charMap[i+'a'] = charMap[i+'A'] = (char)(11+i); //alphabetic, ignore cases
}
}
public boolean isPalindrome(String s) {
char[]pChars = s.toCharArray();
int start = 0,end=pChars.length-1;
char cS,cE;
while(start<end){
cS = charMap[pChars[start]];
cE = charMap[pChars[end]];
if(cS!=0 && cE!=0){
if(cS!=cE)return false;
start++;
end--;
}else{
if(cS==0)start++;
if(cE==0)end--;
}
}
return true;
}
}
class Solution {
private static final char[] charMap = new char[256];
static{
for (int i = 0;i < 10;i++){
charMap['0'+i] = (char)(1+i);
}
for (int i = 0;i < 26;i++){
charMap['a'+i] = charMap['A'+i] = (char)(11+i);
}
}
public boolean isPalindrome(String s) {
char[] sChar = s.toCharArray();
int head = 0, tail = s.length()-1;
while(head<tail){
while(head<tail && charMap[sChar[head]] == 0) head++;
while(head<tail && charMap[sChar[tail]] == 0) tail--;
if(charMap[sChar[head]] != charMap[sChar[tail]]) return false;
head++;
tail--;
}
return true;
}
//思路1:过滤非字母数字;倒置字符串;进行对比
//思路2:整两指针,从两端向中间移动做对比。
//思路3:
}

LeetCode刷题(不断更新)的更多相关文章

  1. LeetCode刷题专栏第一篇--思维导图&时间安排

    昨天是元宵节,过完元宵节相当于这个年正式过完了.不知道大家有没有投入继续投入紧张的学习工作中.年前我想开一个Leetcode刷题专栏,于是发了一个投票想了解大家的需求征集意见.投票于2019年2月1日 ...

  2. LeetCode刷题总结之双指针法

    Leetcode刷题总结 目前已经刷了50道题,从零开始刷题学到了很多精妙的解法和深刻的思想,因此想按方法对写过的题做一个总结 双指针法 双指针法有时也叫快慢指针,在数组里是用两个整型值代表下标,在链 ...

  3. LeetCode刷题总结-数组篇(上)

    数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...

  4. LeetCode刷题总结-数组篇(中)

    本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...

  5. LeetCode刷题总结-数组篇(下)

    本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...

  6. LeetCode刷题总结-树篇(上)

          引子:刷题的过程可能是枯燥的,但程序员们的日常确不乏趣味.分享一则LeetCode上名为<打家劫舍 |||>题目的评论: 如有兴趣可以从此题为起点,去LeetCode开启刷题之 ...

  7. LeetCode刷题笔记和想法(C++)

    主要用于记录在LeetCode刷题的过程中学习到的一些思想和自己的想法,希望通过leetcode提升自己的编程素养 :p 高效leetcode刷题小诀窍(这只是目前对我自己而言的小方法,之后会根据自己 ...

  8. LeetCode刷题模板(1):《我要打10个》之二分法

    Author       :  叨陪鲤 Email         : vip_13031075266@163.com Date          : 2021.01.23 Copyright : 未 ...

  9. leetcode刷题目录

    leetcode刷题目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个有序数组的中位数 5. 最长回文子串 6. Z 字形变换 7. 整数反转 8. 字符串转换整数 (a ...

  10. leetcode 刷题进展

    最近没发什么博客了 凑个数 我的leetcode刷题进展 https://gitee.com/def/leetcode_practice 个人以为 刷题在透不在多  前200的吃透了 足以应付非算法岗 ...

随机推荐

  1. 2020/4/29 一场令人头疼的cf。。。

    今天是被安排的cf...我真的是太菜了啊...又双叒叕被机房的一群dalao吊打了... 这就是我与6年级的dalao的区别吗...我裂开了 T1:A - Exercising Walk 简单题. 就 ...

  2. 使用 mt19937 生成区间随机数

    #include <cstdio> #include <random> #include <ctime> using namespace std; int main ...

  3. Python:基础&爬虫

    Python:基础&爬虫 Python爬虫学习(网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另 ...

  4. 全面掌握胶囊网络:从基础理论到PyTorch实战

    本文全面深入地探讨了胶囊网络(Capsule Networks)的原理.构建块.数学模型以及在PyTorch中的实现.通过本文,读者不仅能够理解胶囊网络的基础概念和高级数学原理,还能掌握其在实际问题中 ...

  5. 如何使用 GTX750 或 1050 显卡安装 CUDA11+

    前言 由于兼容性问题,使得我们若想用较新版本的 PyTorch,通过 GPU 方式训练模型,也得更换较新版本得 CUDA 工具包.然而 CUDA 的版本又与电脑显卡的驱动程序版本关联,如果是低版本的显 ...

  6. GitHub 术语解释

    为了大家进一步了解和使用 GitHub,在本文中,我们一起来看看 GitHub 的常用术语,也可以说是基本概念: Repository:简称Repo,可以理解为"仓库",我们的项目 ...

  7. Ynoi 题目总结:

    Preview: 因为是关于 \(\text{Ynoi}\) 的题目总结,所以自然也要像 \(\text{Ynoi}\) 一样来一段长长的开头. 这是一个蒟蒻的告白 高一上半学期,嘻嘻哈哈的糊弄过去了 ...

  8. 记录jdk17相对于jdk8增加的一下主要语法糖和新特性

    jdk17 发布已经好久了,作为java的长期支持版本,引入了许多有趣且实用的新特性.这些特性不仅提高了开发效率,还增强了语言的表现力和安全性.并且是SpringBoot 3.0以后版本的硬性要求,之 ...

  9. 1. Linux 软件介绍

    重点: rpm -i -e -qi -ql -qf -qa --scripts. yum install remove info list repolist provides. 配置系统源. 搭建私有 ...

  10. .net 下优秀的DI框架推荐,看看你用过几个?

    在.NET生态系统中,有许多出色的依赖注入(DI)框架可供选择.每个框架都有其独特的特点和优点,可以根据项目需求和偏好进行选择.下面详细介绍一些.NET中优秀的DI框架,它们的优点以及适用场景. 1. ...