面试经典150题——验证回文串

面试经典150题 day25

      • 题目来源
      • 我的题解
        • [方法一 双指针](#方法一 双指针)
        • [方法二 双指针 空间优化](#方法二 双指针 空间优化)

题目来源

力扣每日一题;题序:125

我的题解

方法一 双指针

首先去除掉字符串中的无用字符,并将英文字符转换为小写,然后使用双指针来判断是否是回文串。
时间复杂度 :O(n)
空间复杂度:O(n)

java 复制代码
public boolean isPalindrome(String s) {
    s=trimAndToLower(s);
    int n=s.length();
    int left=0,right=n-1;
    while(left<right){
        if(s.charAt(left++)!=s.charAt(right--)){
            return false;
        }
    }
    return true;
}
public String trimAndToLower(String s){
    StringBuilder sb=new StringBuilder();
    int n=s.length();
    for(int i=0;i<n;i++){
        char ch=s.charAt(i);
        if((ch>='a'&&ch<='z')||(ch>='0'&&ch<='9')){
            sb.append(ch);
        }else if(ch>='A'&&ch<='Z'){
            sb.append((char)(ch-'A'+'a'));
        }
    }
    return sb.toString();
}
方法二 双指针 空间优化

不再去删除无效字符,并将英文字符转为小写。而是在遍历过程中直接判断。
时间复杂度:O(n)

空间复杂度:O(1)

java 复制代码
public boolean isPalindrome(String s) {
    int n=s.length();
    int left=0,right=n-1;
    while(left<right){
        while(left<right&&!isUsedChar(s.charAt(left))){
            left++;
        }
        while(left<right&&!isUsedChar(s.charAt(right))){
            right--;
        }
        if(toLower(s.charAt(left++))!=toLower(s.charAt(right--))){
            return false;
        }
    }
    return true;
}
public boolean isUsedChar(char ch){
    return (ch>='a'&&ch<='z')||(ch>='0'&&ch<='9')||(ch>='A'&&ch<='Z');
}
public char toLower(char ch){
    if((ch>='a'&&ch<='z')||(ch>='0'&&ch<='9')){
        return ch;
    }else{
        return (char)(ch-'A'+'a');
    }
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关推荐
eleven_4u2 分钟前
RocketMQ相关问题
java·运维·中间件
迷途小羔羊11 分钟前
项目概述
java·javascript·后端
我命由我1234514 分钟前
5-1.Python 编码进阶 - 函数进阶(参数、返回值、递归、函数作为参数传递、lambda 匿名函数)
java·服务器·数据库·后端·python·java-ee·python3.11
小蒜学长39 分钟前
基于Spring Boot+Vue3的在线游戏技术指导师匹配系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·在线游戏技术指导
文丑颜不良啊39 分钟前
LeetCode226~250题目解析
java·leetcode
物联网软硬件开发-轨物科技1 小时前
【轨物方案】深度解读开关柜智能感知及一键顺控专家系统
大数据·运维·网络·人工智能·算法·机器人
Dovis(誓平步青云)1 小时前
逆变器报警却找不到板子,热斑图怎样定位到具体组串
java·开发语言·人工智能·机器学习·卷积神经网络
行者全栈架构师1 小时前
我用 TRAE Work 把桌游之夜搬进了浏览器:一个计分器的从创意到上线
前端·算法·架构
YFJ_mily1 小时前
【10-12月优质学术会议合集】会议覆盖人工智能、大数据、高端装备、软件与网络安全 、计算机视觉技术等热门方向
算法·安全·web安全·网络安全·软件·rdlink研发家
库玛西1 小时前
外部排序全解析:败者树、置换-选择排序与最佳归并树
c语言·数据结构·c++·笔记·考研·算法