【字符串】【滑动窗口+位运算+双指针】1、无重复字符的最长子串+2、尽可能使字符串相等+3、最长优雅子数组+4、移动零+5、反转字符串

2道简单+3道中等

1、无重复字符的最长子串(难度:中等)

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

超时代码

在这里插入图片描述
老实说,在我写博客的时候,也不知道为啥超时了,因为我看和我AC的代码时间也差不了多少吧(如果有大佬知道,还请在评论区指点一下,抱拳)
写这个超时代码的过程中,也遇到了不少bug,确实体验了一把之前有大佬说,滑动窗口如果出现bug会很麻烦
(所以我就还是老老实实套模板吧)

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_map <char,int> window;
        int left=0,right=0;
        int len = INT_MIN;
        if(s.length()==0){
            return 0;
        }
        while(right<s.length()){
            char c = s[right];
            right++;

            if(!window.count(c)){
                window[c]++;
            }
            //出现重复字符了
            else{
                if(right-1-left>len){
                    // cout<<right-1-left<<endl;
                    len=right-1-left;
                }
                while(window[c]==1){
                    char d = s[left];
                    left++;

                    window[d]--;
                }
                // left=right-1;
                right=right-1;
                // window.clear();
                // cout<<window<<endl;
            }
        }
        if(window[s[right-1]]==1 && right-left>len){
            // cout<<right-1-left<<endl;
            len=right-left;
        }
        return len;
    }
};

AC代码

套模板之后的代码(详情请看上一篇博客,这里就不多说了),非常顺利

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_map <char,int> window;
        int left=0,right=0;
        int len = INT_MIN;
        if(s.length()==0){
            return 0;
        }
        while(right<s.length()){
            char c = s[right];
            right++;

            window[c]++;
            
            //出现重复字符了
        

            while(window[c]>1){
                char d = s[left];
                left++;

                window[d]--;
            }
            if(right-left>len){
                len=right-left;
            }

        }
        return len;
    }
};

2、尽可能使字符串相等(难度:中等)

在这里插入图片描述

该题对应力扣网址

AC代码

这个比之前做过的滑动窗口题还要简单

class Solution {
public:
    int equalSubstring(string s, string t, int maxCost) {
        int left=0,right=0;
        int sum=0;
        int len=0;
        while(right<s.size()){
            char c=s[right];
            char c1=t[right];
            right++;
            sum+=abs(c-c1);
            //当开销大于预算,开始缩减窗口大小
            while(sum>maxCost){
                char d=s[left];
                char d1=t[left];
                left++;
                sum-=abs(d-d1);
            }
            if(right-left>len){
                len=right-left;
            }
        }
        return len;
    }
};

3、最长优雅子数组(难度:中等)

在这里插入图片描述

该题对应力扣网址

AC代码

依旧是滑动窗口的一套逻辑,在这道题里位运算运用的比较巧妙
第一次刷到位运算的题目
1、在扩大窗口的时候:当sum和新加入的数字相与为0,通过或运算sum|=a来存储新的数字的二进制里的1。(之所以存1是因为与,如果相与运算为0,那么运算双方的二进制表示里对应的数位,双方最多只有一个1。)
2、在缩小窗口的时候:使用异或操作sum^=b来“减去”这个数nums[left](之所以异或操作能减去这个数,是因为sum是一个累计之后的结果,累计的这些结果肯定是在sum&a==0的条件下累计的,那么说明,在sum与a的二进制表示肯定没有相同的1位,因此异或就可以减去这个数,不明白的话可以再自己手写一下。)

class Solution {
public:
    int longestNiceSubarray(vector<int>& nums) {
        int left=0,right=0,sum=0,len=INT_MIN;
        while(right<nums.size()){
            int a=nums[right];
            right++;
            if((sum&a)==0){
                //存1
                sum|=a;
            }
            else{
                //缩小窗口
                while((sum&a)!=0){
                    int b=nums[left];
                    left++;
                    sum^=b;
                }
                sum|=a;

            }
            len=max(len,right-left);
        }
        return len;
    }
};

4、移动零(难度:简单)

在这里插入图片描述

该题对应力扣网址

AC代码

思路简单,双指针,先把不为0的挪到前面,剩下的填充0

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int l=0,r=0;
        while(r<nums.size()){
            if(nums[r]!=0){
                nums[l]=nums[r];
                l++;
            }
            r++;
        }
        for(int i=l;i<nums.size();i++){
            nums[i]=0;
        }
    }
};

5、反转字符串(难度:简单)

水题,双指针
在这里插入图片描述

该题对应力扣网址

AC代码

水题

class Solution {
public:
    void reverseString(vector<char>& s) {
        int l=0,r=s.size()-1;
        while(l<=r){
            swap(s[l],s[r]);
            l++;
            r--;
        }
    }
};

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

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

相关文章

误删分区后的数据拯救:双管齐下恢复策略

在数字化时代&#xff0c;数据的价值日益凸显&#xff0c;而误删分区作为常见的数据安全威胁之一&#xff0c;常常让用户措手不及。本文将深入探讨误删分区的现象&#xff0c;并为您揭示两种高效的数据恢复方案&#xff0c;旨在帮助您在最短时间内找回失去的数据&#xff0c;同…

1117 数字之王

solution 判断现有数字是否全为个位数 全为个位数&#xff0c;找出出现次数最多的数字&#xff0c;并首行输出最多出现次数&#xff0c;第二行输出所有出现该次数的数值不全为个位数 若当前位数值为0&#xff0c;无需处理若当前位数值非0&#xff0c;则每位立方相乘&#xff0…

Linux搭建hive手册

一、将hive安装包上传到NameNode节点并解压 1、删除安装MySQL时的.rpm文件 cd /opt/install_packages/ rm -rf *.rpm 2、将安装包拖进/install_packages目录 3、解压安装包 tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/softs/ 4、修改包名 cd /opt/softs mv apache-…

虚拟机下基于海思移植QT(一)——虚拟机下安装QT

0.参考资料 1.海思Hi3516DV300 移植Qt 运行并在HDMI显示器上显示 2.搭建海思3559A-Qt4.8.7Openssl开发环境 1.报错解决 通过下面命令查询 strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_通过命令行没有解决&#xff1a; sudo apt install libc6-dev libc6参考解决…

【国产开源可视化引擎Meta2d.js】锚点

国产开源 乐吾乐潜心研发&#xff0c;自主可控&#xff0c;持续迭代优化 Github&#xff1a;GitHub - le5le-com/meta2d.js: The meta2d.js is real-time data exchange and interactive web 2D engine. Developers are able to build Web SCADA, IoT, Digital twins and so …

【C语言题目】34.猜凶手

文章目录 作业标题作业内容2.解题思路3.具体代码 作业标题 猜凶手 作业内容 日本某地发生了一件谋杀案&#xff0c;警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说&#xff1a;不是我。 B说&#xff1a;是C。 C说&#xff1a;是D。 D说&#xff…

软件是什么?一个软件到底是哪些部分组成的-软件到底有哪些分支呢?

https://doc.youyacao.com/117/2163 软件是什么&#xff1f;一个软件到底是哪些部分组成的-软件到底有哪些分支呢&#xff1f; 何为软件 软件定义 的本质是通过软件编程实现硬件资源的虚拟化、灵活、多样和定制化功能&#xff0c;以最大化系统运行效率和能量效率。它基于硬…

SSM中小学生信息管理系统-计算机毕业设计源码02677

摘要 随着社会的发展和教育的进步&#xff0c;中小学生信息管理系统成为学校管理的重要工具。本论文旨在基于SSM框架&#xff0c;采用Java编程语言和MySQL数据库&#xff0c;设计和开发一套高效、可靠的中小学生信息管理系统。中小学生信息管理系统以学生为中心&#xff0c;通过…

H2 Database Console未授权访问漏洞封堵

背景 H2 Database Console未授权访问&#xff0c;默认情况下自动创建不存在的数据库&#xff0c;从而导致未授权访问。各种未授权访问的教程&#xff0c;但是它怎么封堵呢&#xff1f; -ifExists 很简单&#xff0c;启动参数添加 -ifExists &#xff0c;它的含义&#xff1a…

漏洞分析 | PHP CGI Windows平台远程代码执行漏洞(CVE-2024-4577)

漏洞概述 PHP CGI&#xff08;Common Gateway Interface&#xff09;是在Windows平台上运行PHP的一种方式。CGI是一种标准接口&#xff0c;允许Web服务器与外部应用程序&#xff08;如PHP脚本&#xff09;进行交互&#xff0c;从而生成动态网页内容。 近期&#xff0c;PHP发布…

STMCUBEMX_IIC_LL库_AT24C64分页读取和写入

STMCUBEMX_IIC_LL库_AT24C64分页读取和写入 前言&#xff1a; 一个项目中构建的软件系统需要存储非常多的用户参数&#xff0c;大约有几千字节&#xff0c;所以牵扯到自己设计跨页写入算法&#xff0c;注意读出也是需要设计跨页读出算法的&#xff08;手册没强调&#xff0c;但…

二、从多臂老虎机看强化学习

二、从多臂老虎机看强化学习 2.1 多臂老虎机问题2.1.1 问题定义2.2.2 问题建模2.2.3 累积懊悔2.2.4 估计期望奖励 2.2 强化学习中的探索与利用平衡2.3 贪心策略2.4 上置信界算法2.5 汤普森采样算法 2.1 多臂老虎机问题 2.1.1 问题定义 在多臂老虎机(mutil-armed bandit, MAB)问…

专业电脑录歌软件,电脑录音的六大方法【你了解几个】

电脑录音怎么录&#xff1f;大多数电脑都是有自带的录音功能的&#xff0c;但是由于电脑系统自带的录音功能效果没那么好&#xff0c;很多情况下满足不了我们一些“刁钻”的录音需求。 那么电脑怎么录音&#xff1f;还有哪些好用的录音软件推荐&#xff1f;本文整理了多种电脑录…

常规情况与opencv图像中,计算直线与矩形框的交点

文章目录 1、普通方式1.1、普通计算过程1.2、优化方式 2、图像中的情况2.1、常规处理2.2、opencv中的处理2.2.1、cv::clipLine函数2.2.2、测试代码2.2.3、测试结果 1、普通方式 已知矩形框左上(x1,y1)、右下(x2,y2&#xff09;点&#xff0c;直线方程 y kxb&#xff0c;求交点…

桌面保存的Word文件删除怎么找回?超实用的三个方法?

在日常工作和学习中&#xff0c;我们经常会使用Word文档进行文字编辑和文件保存。但是&#xff0c;有时由于操作失误或系统故障&#xff0c;我们会不小心将存放在电脑桌面重要的Word文件删除了。导致无法挽回的损失&#xff0c;但幸运的是&#xff0c;有一些方法可以帮助我们找…

基于SpringBoot的乐校园二手书交易管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言 Java 数据库 MySQL 技术 SpringBoot框架 工具 Visual Studio、MySQL数据库开发工具 系统展示 首页 用户注册界面 二手图书界面 个人中心界面 摘要 乐校园…

新港海岸NCS8822 低功耗DP转VGA 分辨率支持1920*1200*60HZ

NCS8822描述&#xff1a; NCS8822是一个低功耗显示端口到vga转换器。NCS8822集成了一个与DP1.2兼容的接收器和一个高速三通道视频DAC。对于DP1.2输入&#xff0c;NCS8822支持1车道/2车道&#xff0c;也支持车道交换功能。对于VGA输出NCS8822&#xff0c;在60Hz帧率下对WUXGA&a…

【HICE】搭建不同的主机名访问web服务

1.首先进入1.conf.d编辑内容&#xff0c;再重启服务&#xff0c;关闭防火墙 2.部署网页haha.html和xixi.html 3.在vim /etc/hosts增加域名 3.在window中进行本地解析的编辑 4.浏览器的验证

自闭症孩子的语言之旅:最晚几岁会说话的探索与思考

作为在自闭症学校工作的教育者&#xff0c;我深知自闭症这一神经发展性障碍给孩子们带来的挑战&#xff0c;尤其是他们在语言发展方面的困难。自闭症孩子的语言发展轨迹各不相同&#xff0c;有的孩子可能早早地展现出语言天赋&#xff0c;而有的孩子则可能迟迟不开口。那么&…

AI文字图片人脸生成原创视频文生图生肖生小程序开发

AI文字图片人脸生成原创视频文生图生肖生小程序开发 无限开 0.12生成 图生视频 AI技术在生成文字、图片、人脸以及视频方面已经取得了显著的进步。以下是一些可能包含在AI文字图片人脸生成原创视频小程序中的功能列表&#xff1a; 文字转视频&#xff1a; 输入文字或文章&…