当前位置: 首页 > news >正文

leetcode刷题日记——验证回文串

[ 题目描述 ]:
在这里插入图片描述
[ 思路 ]:

  • 题目要求验证一个字符串中所有的字母或数字组成的字符串是否为回文串,即反过来和原本一样
  • 首先需要提取出所有的英文字母,并将其全部转换为小写( 由于转换大写比较方便,所以采用了转为大写)
  • 定义双指针,从头尾两端进行匹配
    • 全部相同则为回文串
    • 否则不是
  • 运行如下
    在这里插入图片描述
bool isPalindrome(char* s) {
    int head=0,rear,len=strlen(s),index=0;
    char* temp=(char*)malloc(sizeof(char)*(len+1));
    for(int i=0;i<len;i++){
        if((s[i]>=65 && s[i]<=90) || (s[i]>=97 && s[i]<=122) ||(s[i]>=48 && s[i]<=57)){
            temp[index++]= s[i]>=97 ? s[i]-32 : s[i];
        }
    }
    temp[index]='\0';
    rear=index-1;
    while(head<rear){
        if(temp[head++]!=temp[rear--]){
            free(temp);
            return false;
        }
    }
    free(temp);
    return true;
}
  • 时间复杂度O(n),空间复杂度O(n)

[ 优化 ]:

  • 如果直接在原字符上操作,就可以不用申请额外的空间
  • 那么只需要,首指针或尾指针在不是字母或者数字时,跳到下一个字符
  • 当首尾指针均为字母或数字时,进行比较
    • 如果不相同,则直接返回false
  • 运行如下
    在这里插入图片描述
char lower(char s){
    return (s>=65 && s<=90) ? s+32:s;
}

bool isPalindrome(char* s) {
    int head=0,rear=strlen(s)-1;
    while(head<rear){
        while(head < rear && !((s[head]>=65 && s[head]<=90) || (s[head]>=97 && s[head]<=122) ||(s[head]>=48 && s[head]<=57))) {
            head++;
        }
        while(head < rear && !((s[rear]>=65 && s[rear]<=90) || (s[rear]>=97 && s[rear]<=122) ||(s[rear]>=48 && s[rear]<=57))){
            rear--;
        }
        if(lower(s[head])!=lower(s[rear])) return false;
        head++;
        rear--;
    }
    
    return true;
}

[ 官方题解 ]:

  • 一、筛选+判断,即第一段代码的思想
  • 二、在原字符串上直接判断,即优化部分的代码
http://www.dtcms.com/a/122741.html

相关文章:

  • 算法比赛中常用的数学知识
  • C# Winform 入门(15)之制作二维码和拼接(QR)
  • miniconda安装R语言图文教程(详细步骤)
  • 13. git clone
  • Mysql | 主从复制的工作机制
  • 西电服务器环境配置问题汇总(一)
  • 【同步教程】基于Apache SeaTunnel从MySQL同步到MySQL——Demo方舟计划
  • 山东大学软件学院项目实训开发日志(7)之测试前后端本地部署
  • TCP连接四次挥手的过程,为什么是四次?
  • STM32单片机入门学习——第30节: [9-6] FlyMcu串口下载STLINK Utility
  • Rust入门之迭代器(Iterators)
  • 实战篇-梳理时钟树
  • QT学习笔记
  • 使用 DeepSeek API 实现新闻文章地理位置检测与地图可视化
  • 华为手机或平板与电脑实现文件共享
  • 电脑清洁常用工具
  • MySQL:锁
  • 秒杀业务的实现过程
  • Java 开发中主流安全框架的详细对比,涵盖 认证、授权、加密、安全策略 等核心功能,帮助开发者根据需求选择合适的方案
  • IP查询能够帮助企业进行数字化转型
  • 医学分割新标杆!双路径PGM-UNet:CNN+Mamba实现病灶毫厘级捕捉
  • UniApp 页面布局自定义头部导航
  • Seq2Seq - CrossEntropyLoss细节讨论
  • 深入理解 Vuex:核心概念、API 详解与最佳实践
  • 网络安全应急响应-启动项和任务计划排查
  • 2. git init
  • 探索生成式AI在游戏开发中的应用——3D角色生成式 AI 实现
  • 华为数字芯片机考2025合集3已校正
  • 今天你学C++了吗?——set
  • 深入浅出SPI通信协议与STM32实战应用(W25Q128驱动)(实战部分)