冲冲冲

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. MySQL8.0默认加密连接方式

    Mysql8.0开始默认采用新的caching_sha2_password的身份验证方式,常规老接口会因此无法连接数据库. 为继续使用老的身份验证方式,需显式指定身份验证方式为 mysql_nativ ...

  2. liunx知识点--umask

    介绍 umask(user's mask)用来设置文件权限掩码.权限掩码是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限. UNIX最初实现时不包含umask命 ...

  3. 16.1 Socket 端口扫描技术

    端口扫描是一种网络安全测试技术,该技术可用于确定对端主机中开放的服务,从而在渗透中实现信息搜集,其主要原理是通过发送一系列的网络请求来探测特定主机上开放的TCP/IP端口.具体来说,端口扫描程序将从指 ...

  4. webwork学习

    学习了H5中的webworker 主机 > 程序 > 进程 > 线程 > 纤程 多进程(重) 多线程(轻) 开销 创建.销毁开销大 创建.销毁开销小 安全性 进程之间是隔离 线 ...

  5. 使用aop(肉夹馍)为BlazorServer实现统一异常处理

    背景 用户做一个操作往往对应一个方法的执行,而方法内部会调用别的方法,内部可能又会调用别的方法,从而形成一个调用链.我们一般是在最顶层的方法去加try,而不是调用链的每一层都去加try. 在web开发 ...

  6. MyBatis拦截器优雅实现数据脱敏

    背景 现代网络环境中,敏感数据的处理是至关重要的.敏感数据包括个人身份信息.银行账号.手机号码等,泄露这些数据可能导致用户隐私泄露.财产损失等严重后果.因此,对敏感数据进行脱敏处理是一种必要的安全措施 ...

  7. 关于Linux性能监控之CPU篇详解

    http://news.chinaunix.net/opensource/2013/0228/2654519.shtml # vmstat 1 procs -----------memory----- ...

  8. InfiniBand 的前世今生

    今年,以 ChatGPT 为代表的 AI 大模型强势崛起,而 ChatGPT 所使用的网络,正是 InfiniBand,这也让 InfiniBand 大火了起来.那么,到底什么是 InfiniBand ...

  9. 关于点赞业务对MySQL和Redis和MongoDB的思考

    点赞 ​ 在我个人理解中,点赞业务比较频繁,很多人业务可能都会有这个,比如:博客,视频,文章,动态,评论等,但是不应该是核心业务,不应该大量地请求MySQL数据库,给数据库造成大量的资源消耗,MySQ ...

  10. offline RL | BCQ:学习 offline dataset 的 π(a|s),直接使用 (s, π(s)) 作为 Q learning 训练数据

    题目: Off-Policy Deep Reinforcement Learning without Exploration,ICLR 2019 pdf 版本:https://arxiv.org/pd ...