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

news2024/11/24 20:00:37

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--;
        }
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于jeecgboot-vue3的Flowable流程-集成仿钉钉流程(二)增加基本的发起人审批与多用户多实例

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、AssigneeNode 增加approvalText public abstract class AssigneeNode extends Node {// 审批对象private AssigneeTypeEnum assigneeType;// 表单内人员private String formUser;// 表…

【最详细】PhotoScan(MetaShape)全流程教程

愿天下心诚士子&#xff0c;人人会PhotoScan&#xff01; 愿天下惊艳后辈&#xff0c;人人可剑开天门&#xff01; 本教程由CSDN用户CV_X.Wang撰写&#xff0c;所用数据均来自山东科技大学视觉测量研究团队&#xff0c;特此鸣谢&#xff01;盗版必究&#xff01; 一、引子 Ph…

Linux_共享内存通信

目录 1、共享内存原理 2、申请共享内存 2.1 ftok 2.2 测试shmget、ftok 2.3 查看系统下的共享内存 3、关联共享内存 3.1 测试shmat 4、释放共享内存 4.1 测试shmctl 5、实现共享内存通信 6、共享内存的特性 结语 前言&#xff1a; 在Linux下&#xff0c;有一…

【C++】日期类

鼠鼠实现了一个日期类&#xff0c;用来练习印证前几篇博客介绍的内容&#xff01;&#xff01; 目录 1.日期类的定义 2.得到某年某月的天数 3.检查日期是否合法 4.&#xff08;全缺省&#xff09;构造函数 5.拷贝构造函数 6.析构函数 7.赋值运算符重载 8.>运算符重…

【论文阅读】VASA-1: Lifelike Audio-Driven Talking FacesGenerated in Real Time

整体框架。不直接生成视频帧&#xff0c;而是在潜在空间中生成整体面部动态和头部运动&#xff0c;条件是音频和其他信号。给定这些运动潜在编码&#xff0c;通过面部解码器生成视频帧&#xff0c;还接受从输入图像中提取的外观和身份特征作为输入。 构建了一个面部潜在空间并…

JMH320【亲测】【御剑九歌】唯美仙侠手游御剑九歌+WIN学习手工端+视频教程+开服清档+运营后台+授权GM物品充值后台

资源介绍&#xff1a; 这也是仙梦奇缘的一个游戏 注意&#xff1a;外网14位IP或域名 ———————————————————————————————————– ps后台介绍: 1区运营后台&#xff1a;http://ip:9981/admin/admintool/ 2区运营后台&#xff1a;http://ip…

Finding Global Homophily in Graph Neural Networks When Meeting Heterophily

本文发表于:ICML22 推荐指数: #paper/⭐⭐⭐ 问题背景: 异配图的邻接矩阵难以确定,以及异配图的计算复杂度开销大 可行的解决办法:高通滤波多跳邻居,GPRGNN(pagerank一类&#xff0c;各阶邻居的权重不同,ACM-GCN&#xff08;高低通滤波,H2GCN&#xff08;应该复杂度很大&…

阶段总结——基于深度学习的三叶青图像识别

阶段总结——基于深度学习的三叶青图像识别 文章目录 一、计算机视觉图像分类系统设计二、训练模型2.1. 构建数据集2.2. 网络模型选择2.3. 图像数据增强与调参2.4. 部署模型到web端2.5. 开发图像识别小程序 三、实验结果3.1. 模型训练3.2. 模型部署 四、讨论五、参考文献&#…

Rocky Linux 9.4基于官方源码制作openssh 9.8p1二进制rpm包 —— 筑梦之路

2024年7月1日&#xff0c;openssh 9.8版本发布&#xff0c;主要修复了CVE-2024-6387安全漏洞。 由于centos 7的生命周期在6月30日终止&#xff0c;因此需要逐步替换到Rocky Linux&#xff0c;后续会有更多分享关于Rocky Linux的文章。 环境说明 1. 操作系统版本 cat /etc/o…

GuLi商城-商品服务-API-品牌管理-效果优化与快速显示开关

<template><div class"mod-config"><el-form :inline"true" :model"dataForm" keyup.enter.native"getDataList()"><el-form-item><el-input v-model"dataForm.key" placeholder"参数名&qu…

ASUS/华硕枪神5 G533Q G733Q系列 原厂win10系统 工厂文件 带F12 ASUS Recovery恢复

华硕工厂文件恢复系统 &#xff0c;安装结束后带隐藏分区&#xff0c;一键恢复&#xff0c;以及机器所有驱动软件。 系统版本&#xff1a;Windows10 原厂系统下载网址&#xff1a;http://www.bioxt.cn 需准备一个20G以上u盘进行恢复 请注意&#xff1a;仅支持以上型号专用…

(仿真+报告+源码)基于51单片机的温湿度监测系统

&#xff08;仿真报告源码&#xff09;基于51单片机的温湿度监测系统 付费后获得百度网盘链接&#xff0c;网盘链接在最后&#xff0c;有问题私信哦~~~ 一.系统简介 该系统由单片机、温湿度传感器器、液晶显示器以及浇水控制电路组成。该系统使用AT89C51单片机作为控制核心&…

JavaScript(6)——数据类型转换

为什么需要类型转换&#xff1f; JavaScript是弱数据类型&#xff1a;JavaScript不知道变量到底属于哪种数据类型&#xff0c;只有赋值了才清除 使用表单&#xff0c;prompt获取的数据默认为字符串类型&#xff0c;此时不能直接进行算数运算 隐式转换 某些运算符被执行时&am…

常规情况与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;求交点…

Ubuntu / Debian安装FTP服务

本章教程,记录在Ubuntu中安装FTP服务的具体步骤。FTP默认端口:21 1、安装 pure-ftpd sudo apt-get install pure-ftpd2、修改默认配置 # 与 centos 不同,这里需要在 /etc/pure-ftpd/conf 文件夹下执行下列命令,增加对应配置文件: # 创建 /etc/pure-ftpd/conf/PureDB 文件…

4.2 投影

一、投影和投影矩阵 我们以下面两个问题开始&#xff0c;问题一是为了展示投影是很容易视觉化的&#xff0c;问题二是关于 “投影矩阵”&#xff08;projection matrices&#xff09;—— 对称矩阵且 P 2 P P^2P P2P。 b \boldsymbol b b 的投影是 P b P\boldsymbol b Pb。…

金属3D打印如何精准选材

随着3D打印技术的飞跃发展&#xff0c;模具制造领域迎来了前所未有的创新机遇。在众多3D打印技术中&#xff0c;SLM金属3D打印以其精度高、复杂结构成型能力&#xff0c;成为众多行业的优选。然而&#xff0c;金属打印材料&#xff0c;如何精准选择&#xff0c;以最大化满足项目…

ASP.NET MVC-razor编写-2-svg中使用js+添加事件监听

环境&#xff1a;win10 效果 初始状态&#xff1a; 鼠标移入某个text&#xff08;比如KS primer&#xff09;时&#xff0c;text和连接的线条与箭头都变色&#xff1a; 鼠标移出时回复正常。 如果是移入另一种红色的text&#xff08;比如Cell Sceening Tag&#xff09;&…

Python学习笔记29:进阶篇(十八)常见标准库使用之质量控制中的数据清洗

前言 本文是根据python官方教程中标准库模块的介绍&#xff0c;自己查询资料并整理&#xff0c;编写代码示例做出的学习笔记。 根据模块知识&#xff0c;一次讲解单个或者多个模块的内容。 教程链接&#xff1a;https://docs.python.org/zh-cn/3/tutorial/index.html 质量控制…

【数据结构】(6.2)堆的应用——Top-K问题(C语言)

系列文章目录 文章目录 系列文章目录问题引入一、TopK 问题 是什么&#xff1f;二、TopK 问题解决思路2.1 TopK 思路2.2 随机产生数字2.2 完整代码2.3 验证结果 问题引入 TopK 问题 (在一堆数据里面找到前 K 个最大 / 最小的数)。 一、TopK 问题 是什么&#xff1f; 生活中也…