冲冲冲

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. 开发微信小程序技术栈

    开发微信小程序主要需要以下技术栈: 小程序框架参考文档 小程序组件参考文档 小程序 API 参考文档 小程序服务端 API 参考文档 微信开发者工具参考文档 微信云托管参考文档 微信云开发参考文档 1 ...

  2. Jmeter内的参数有文件时,如何传参?

    文件类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 尊重原创,转载请注明出处,谢谢!!

  3. Graph RAG: 知识图谱结合 LLM 的检索增强

    本文为大家揭示 NebulaGraph 率先提出的 Graph RAG 方法,这种结合知识图谱.图数据库作为大模型结合私有知识系统的最新技术栈,是 LLM+ 系列的第三篇,加上之前的图上下文学习.Te ...

  4. nvm的安装及使用(入门级)

    1 从官网下载压缩包到本地 下载地址: https://github.com/coreybutler/nvm-windows/releases 2 配置 2.1 settings.txt配置 (1)下 ...

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

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

  6. Subtree 题解

    Subtree 题目大意 给定一颗树,你可以选出一些节点,你需要对于每个点求出在强制选这个点的情况下所有选择的点联通的方案数,对给定模数取模. 思路分析 对于这种求树上每一个点方案数的题目,首先考虑换 ...

  7. 不写代码、构建一个开源的 ChatGPT,总共需要几步?|Hugging News #1020

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...

  8. 《流畅的Python》 读书笔记 第5章 一等函数 20231025

    第5章 一等函数 第四章相对偏僻,但时间上一样要花我很久,就先跳过了,回头再补.而这个第5章节是非常重要的.只是最近工作有点忙,我读的越来越慢了~继续坚持吧. 在 Python 中,所有函数都是一等对 ...

  9. Python Web UI自动化报错 :ResourceWarning: Enable tracemalloc to get the object allocation traceback

    ResourceWarning资源警告解决方案 原因:在执行线性脚本完毕时,没有及时释放相应资源,导致内存堆积,从而造成内存溢出(如关闭浏览器等操作),此时,Python将会做出提醒: 在百度吸取 网 ...

  10. 编写高性能C#代码 —— Span<T>

    Span 提供任意内存的连续区域的类型安全和内存安全表示形式.它是在堆栈而不是托管堆上分配的ref结构,是对任意内存块的抽象 . 1.关于Span 在NET Core 2.1中首次引入 提供对任意内存 ...