【字符串】【双指针】1、仅仅反转字母+2、回文子串+ 3、最长回文子串+4、验证回文串+5、反转字符串中的单词

今天依旧是字符串!2道简单+3道中等

1、仅仅反转字母(难度:简单)

在这里插入图片描述
在这里插入图片描述

该题对应力扣网址

错误做法

一开始是“原始”思路,交了之后果然不对,错误的思路我也就不解释了。

class Solution {
public:
    string reverseOnlyLetters(string s) {
        int n=s.length();
        int i,temp;
        for(i=0;i<n/2;i++){
            if((s[i]>='a' && s[i]<='z') || (s[i]>='A' && s[i]<='Z')){
                temp=s[i];
                s[i]=s[n-i-1];
                s[n-i-1]=temp;
            }

        }
        return s;
    }
};

AC代码

想了一下还是用前几天刚学过的双指针就行(真香了)

class Solution {
public:
    bool alphabet(char ch){
        if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z')){
            return true;
        }
        return false;
    }
    string reverseOnlyLetters(string s) {
        int n=s.length();
        int left=0,right=n-1,temp;
        while(left<=right){
            if(alphabet(s[left]) && alphabet(s[right])){
                temp=s[left];
                s[left]=s[right];
                s[right]=temp;
                left++;
                right--;
            }
            else if(!alphabet(s[left]) && alphabet(s[right])){
                while(!alphabet(s[left])){
                    left++;
                }
                temp=s[left];
                s[left]=s[right];
                s[right]=temp;
                left++;
                right--;
            }
            else if(alphabet(s[left]) && !alphabet(s[right])){
                while(!alphabet(s[right])){
                    right--;
                }
                temp=s[left];
                s[left]=s[right];
                s[right]=temp;
                left++;
                right--;
            }
            else{
                left++;
                right--;
            }

        }

        return s;
    }
};

2、回文子串(难度:中等)

在这里插入图片描述
该题对应力扣网址

AC代码

一开始没啥思路,只有笨方法,(觉得写了肯定也超时) 大概看了题解推荐的方法,其中这个双指针中心点的方法还是挺简单的,dp那个方法没看懂,等做dp类型的时候再说。
这道题就是和普通的判断是否是回文串反过来了,判断回文串,一般都是从两边往中间,双指针。
这道题是找字符串里有多少回文串,是从中心点往两边双指针
思路:
中心点分两类:一个中心点、两个中心点
然后从中间往两边看两边对应位置的字符是否一样

class Solution {
public:
    int countSubstrings(string s) {
        int n = s.length();
        int i,j,k;
        int left,right;
        int num = 0;
        //遍历字符串里每个字符
        for(i=0;i<n;i++){
            //确定一个或两个中心点
            for(j=0;j<=1;j++){
                left=i;
                right=i+j;
                if(j==1){
                    if(s[left]!=s[right]){
                        continue;
                    }
                }
                while(left>=0 && right<=n && s[left--]==s[right++]){
                    num++;
                }
            }
        }
        return num;
    }
};

3、最长回文子串(难度:中等)

在这里插入图片描述
该题对应力扣网址

AC代码

没啥,和上一题的思路基本一致

class Solution {
public:
    static bool cmp(const pair<string,int> &a,const pair<string,int> &b){
        return a.second>b.second;
    }

    string longestPalindrome(string s) {
        int i,j,k,l,r,count;
        int n = s.length();
        vector <pair<string,int>> str;
        for(i=0;i<n;i++){
            for(j=0;j<=1;j++){
                count=0;
                l=i;
                r=i+j;
                if(j==1){
                    if(s[l]!=s[r]){
                        continue;
                    }
                }
                while(l>=0 && r<=n-1 &&l<=r && s[l--]==s[r++]){
                    count++;
                }
                if(j==1){
                    str.push_back({s.substr(i-count+1,count*2), count*2});
                }
                if(j==0){
                    str.push_back({s.substr(i-count+1,(count-1)*2+1), (count-1)*2+1});
                }
            }
        }
        sort(str.begin(),str.end(),cmp);
        return str[0].first;
    }
};

4、验证回文串(难度:简单)

在这里插入图片描述

该题对应力扣网址

AC代码

没啥说的

class Solution {
public:
    //判断是不是大写字母
    bool daxie(char ch){
        if(ch>='A' && ch<='Z'){
            return true;
        }
        return false;
    }
    //判断是不是小写字母
    bool xiaoxie(char ch){
        if(ch>='a' && ch<='z'){
            return true;
        }
        return false;
    }
    //判断是不是数字
    bool shuzi(char ch){
        if(ch>='0' && ch<='9'){
            return true;
        }
        return false;
    }
    //判断是不是回文串
    bool huiwen(string str){
        int n = str.length();
        int l=0,r=n-1;
        while(l<=r){
            if(str[l]==str[r]){
                l++;
                r--;
            }
            else{
                return false;
            }
        }
        return true;
    }
    bool isPalindrome(string s) {
        int i,j=0,k;
        int n = s.length();
        string str="";
        for(i=0;i<n;i++){
            if(daxie(s[i])){
                str+=s[i]+32;
            }
            else if(xiaoxie(s[i])){
                str+=s[i];
            }
            else if(shuzi(s[i])){
                str+=s[i];
            }
        }
        return huiwen(str);
    }
};

5、反转字符串中的单词(难度:中等)

在这里插入图片描述
该题对应力扣网址

AC代码

没看题解,思路依旧是双指针,r指针从后往前,遍历完一个单词之后,l指针从前往后,遍历这个单词,并加入到新的字符串str中。
主要有四种情况,按照代码的顺序依次是:
1、单词左面第一个空格
2、字符串第一个字符且该字符不是空格
3、存在连续的多个空格
4、单词中的字符
注意:写代码的时候,不注意的话,数组容易溢出,建议在判断条件里把边界放在前面,例如while(r>=0 && s[r]==' ')

class Solution {
public:
    string reverseWords(string s) {
        int i,j,k,count=0;
        int l,r;
        string str="";
        r=s.length()-1;
        while(r>=0){
            if(s[r]==' ' && s[r+1]!=' ' && r+1<=s.length()-1){
                l=r;
                cout<<r<<" "<<count<<endl;
                while(count>0){
                    l++;
                    str+=s[l];
                    count--;
                }
                count=0;
                str+=' ';
            }
            else if(r==0 && s[r]!=' '){
                l=r;
                while(count>=0){
                    str+=s[l];
                    l++;
                    count--;
                }
                count=0;
            }
            //存在多个空格
            else if(s[r]==' '){
                while( r>=0 && s[r]==' '){
                    r--;
                }
                continue;
            }
            else{
                count++;
            }
            r--;
        }
        int n=str.length()-1;
        //把多余的最后的空格删掉
        if(str[n]==' '){
            str.pop_back();
        }
        return str;
    }
};

中间出去玩儿了两天,今天才补上,慢慢来吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/750770.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计Python+LSTM+Tensorflow股票分析预测 基金分析预测 股票爬虫 大数据毕业设计 深度学习 机器学习 数据可视化 人工智能

基于TensorFlow-LSTM的股票预测系统开题报告 一、研究背景与意义 随着信息技术的飞速发展&#xff0c;股票市场作为现代经济活动的重要组成部分&#xff0c;其价格波动受到广泛关注。投资者们迫切希望通过科学的方法预测股票价格&#xff0c;以优化投资决策&#xff0c;实现利…

达梦数据库的系统视图v$database

达梦数据库的系统视图v$database 基础信息 OS版本&#xff1a; Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a; DM Database Server 64 V8 DB Version: 0x7000c 03134284132-20240115-215128-20081在达梦数据库&#xff08;Dameng Database&#xf…

yolov10打包为exe

一、前言 本节实验将官方yolov10推理程序打包为exe运行 二、代码 首先下载官方代码至本机&#xff0c;并使用conda创建虚拟环境&#xff0c;并安装好yolov10所需库 conda create --prefix E:/pyenv/myYolo10 python3.8 pip install -r requirements.txt 下载官方模型权重 …

最新Adobe2024全家桶下载,PS/PR/AE/AI/AU/LR/ID详细安装教程

如大家所熟悉的&#xff0c;Adobe全家桶系列常用的软件有Photoshop&#xff08;PS&#xff09;、Premiere&#xff08;PR&#xff09;、After Effects&#xff08;AE&#xff09;、illustrator&#xff08;AI&#xff09;、Audition&#xff08;AU&#xff09;、Lightroom&…

计算机二级Access操作题总结——综合应用

属性表相关 例1&#xff1a; 不允许输入和修改其中的数据→【是否锁定】 例2&#xff1a; 单击“退出”按钮(名为“bt2”)&#xff0c;调用设计好的宏“mEmp”来关闭窗体。 分组和汇总 对“rSell”报表进行适当设置&#xff0c;使每名雇员的姓名显示在该雇员所售书籍信…

第四天 怎么又迟到了呀 哎啥时候来准时上个课呀

泛型编程 Traits实现&#xff0c;是什么 泛型编程&#xff08;Generic Programming&#xff09;是一种通过编写与特定类型无关的代码来实现代码复用和抽象的编程范式。 在C中&#xff0c;模板&#xff08;Templates&#xff09;是实现泛型编程的主要手段。 Traits&#xff0…

基于ssh框架的个人博客源码

基于ssh的个人博客源码&#xff0c;页面清爽简洁&#xff0c;原先有部分bug,运行不了&#xff0c;现已修复 1.博客首页 &#xff08;本地访问地址 :localhost:8080/Blog/index/index&#xff09; 2.关于我 3.慢生活 4.留言板 5.我的相册 微信扫码下载源码

《分析模式》漫谈07-怎样把一张图从不严谨改到严谨

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 下图是《分析模式》原书第2章的图2.10&#xff0c;里面有一些错误和考虑不周的地方&#xff1a; 2004中译本和2020中译本的翻译如下&#xff1a; 基本上都是照搬&#xff0c;没有改过…

widows下 vscode 的 terminal / powershell,ctrl+v失灵,输出^v

问题 原因 最近装了PSReadLine Import-Module PSReadLineSet-PSReadLineOption -PredictionSource History Set-PSReadLineOption -PredictionViewStyle InlineView Set-PSReadLineOption -EditMode Emacsvscode不兼容 解决方法 注释掉最后面的 Import-Module PSReadLineS…

2021年12月电子学会青少年软件编程 中小学生Python编程等级考试三级真题解析(选择题)

2021年12月Python编程等级考试三级真题解析 选择题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 1、小明在学习计算机时&#xff0c;学习到了一个十六进制数101,这个十六进制数对应的十进制数的数值是 A、65 B、66 C、256 D、257 答案&#xff…

浅析Resource Quota中limits计算机制

前言 在生产环境中&#xff0c;通常需要通过配置资源配额&#xff08;Resource Quota&#xff09;来限制一个命名空间&#xff08;namespace&#xff09;能使用的资源量。在资源紧张的情况下&#xff0c;常常需要调整工作负载&#xff08;workload&#xff09;的请求值&#xf…

MySQL周内训参照4、触发器-插入-修改-删除

触发器 1、用户购买商品时&#xff0c;要求库存表中的库存数量自动修改 详细示例 delimiter $$ create trigger stock_change after -- 事件触发在 下订单之后 insert -- 监视插入事件 on stock -- 监视 order订单表 for each row begin update stock set stockstock-new.st…

ROT5、ROT13、ROT18、ROT47全系列加解密小程序

ROT5、ROT13、ROT18、ROT47全系列加解密小程序 这几天在看CTF相关的课程&#xff0c;涉及到古典密码学和近代密码学还有现代密码学。自己编了一个关于ROT全系列的加、解密小程序。 ​ ROT5、ROT13、ROT18、ROT47 编码是一种简单的码元位置顺序替换暗码。此类编码具有可逆性&a…

音视频入门基础:H.264专题(8)——H.264官方文档的描述符

音视频入门基础&#xff1a;H.264专题系列文章&#xff1a; 音视频入门基础&#xff1a;H.264专题&#xff08;1&#xff09;——H.264官方文档下载 音视频入门基础&#xff1a;H.264专题&#xff08;2&#xff09;——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

开发自动回复信息的插件:代码的力量与智慧!

在信息爆炸的时代&#xff0c;自动回复信息的插件成为了许多用户和管理者的得力助手&#xff0c;这些插件能够根据预设的规则或算法&#xff0c;自动、快速、准确地回复用户的信息&#xff0c;极大地提高了沟通效率和用户体验。 而开发这样一款插件&#xff0c;离不开一系列精…

这三款工具很好用,赶快试试

FileZilla FileZilla是一款免费开源的FTP软件&#xff0c;分为客户端版本和服务器版本&#xff0c;具备所有的FTP软件功能。它是一个快速、可信赖的FTP客户端以及服务器端开放源代码程序&#xff0c;具有多种特色和直觉的界面。FileZilla客户端版是一个方便高效的FTP客户端工具…

校企合作,为人才培养注入新动力

树莓集团在校企合作育人方面取得了显著成效&#xff0c;通过共建专业、定制课程、实习实训等多种方式&#xff0c;实现了教育资源的优化配置和高效利用&#xff0c;为高校和企业提供了更多的发展机会和合作空间。 1、共建专业与实验室&#xff1a;树莓集团与高校共同建设数字产…

Transformer教程之Transformer的历史背景

在现代人工智能领域&#xff0c;Transformer模型已经成为一种不可或缺的技术&#xff0c;它在自然语言处理&#xff08;NLP&#xff09;和计算机视觉等多个领域取得了巨大的成功。本文将带你回顾Transformer的历史背景&#xff0c;了解它是如何从最初的构想到今天的广泛应用的。…

分享一款永久免费内网穿透工具——巴比达内网穿透

最近在做web项目&#xff0c;想办法将web项目映射到公网进行访问&#xff0c;由于没有固定IP&#xff0c;只能使用内网穿透的方法&#xff0c;于是在网上搜索了一番&#xff0c;只有神卓互联旗下的这款巴比达内网穿透是真正免费的&#xff0c; 其它的要么用不了、要么限制没有流…

springcloud-config 客户端启用服务发现client的情况下使用metadata中的username和password

为了让spring admin 能正确获取到 spring config的actuator的信息&#xff0c;在eureka的metadata中添加了metadata.user.user metadata.user.password eureka.instance.metadata-map.user.name${spring.security.user.name} eureka.instance.metadata-map.user.password${spr…