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

【剑斩OFFER】算法的暴力美学——无重复字符的最长字串

一、题目描述

二、算法原理

⏩️解法:利用规律使用"滑动窗口"来解决问题。

⏩️1.定义两个指针都指向字符串的开始。

⏩️2.定义一个哈希一开始初始化为false,表示没有表中没有该字符。

⏩️3.判断:如果哈希表里面没有该字符就 hash[s[right]] = true。然后 right++ 右移,在移动的过程中,如果发现有字符在哈希表中了,left 要右移过第一个和 right 指向的字符后面的字符。

        ⏩️上面的图中 right 指向的 a 已经在哈希表中了,所以:

       ⏩️ 原因:请看下图:

        ⏩️这两种情况的长度都小于 left 指向 d 的长度,所以 left 只能指向 b 来寻找最大的长度,而且right 也不用回去一个判断,因为 right 回去指向 b 此时 left 和 right 也指向 b ,但是最终 right 肯定要经过 a 的,再说 left 已经跳过 a 了,证明 left 到  right 的区间是没有重复的字符的,right 往后找就行。

        ❌️注意:left 在移动的过程中要把哈希表含有经过的字符变成 false,代表着后面 left 到 right 区间的字符是不含有前面的字符的。

⏩️4、更新结果

        ⏩️不管 right 在移动的过程怎么样都要记录下最长的字符串。

三、代码实现

class Solution {
public:int lengthOfLongestSubstring(string s) {int hash[128] = {0};int left = 0, right = 0, n = s.size();int ret = 0;while(right < n){hash[s[right]]++;while(hash[s[right]] > 1)//表示遇到重复性字符{hash[s[left++]]--;//left右移动同时经过的字符出现的次数变为0}ret = max(ret,right - left + 1);//无论怎么样都要更新结果right++;}return ret;}
};

探索性代码:

class Solution {
public:int lengthOfLongestSubstring(string s) {bool hash[128] ={false};int left = 0 ,ret = 0;for(int right = 0; right < s.size();right++){if(hash[s[right]] == false){hash[s[right]] = true;}else{while(s[left] != s[right]){hash[s[left++]] = false;//移动的过程中,left指向的字符不能在hash表中,因为后面的字符不一定有前面的字符。} left++;}ret = max(ret,right - left + 1);}return ret;}
};
http://www.dtcms.com/a/441716.html

相关文章:

  • LeetCode 437. 路径总和 III
  • LeetCode-hot100——​二叉搜索树中第k小的元素​
  • 算法基础 典型题 单调栈
  • 人工智能赋能传统医疗设施设备改造:路径、挑战与未来展望
  • 【Java】杨辉三角、洗牌算法
  • 密码学中的Salt
  • 嵌入式硬件——基于IMX6ULL的GPT(通用定时器)实现
  • 东莞 营销网站建设互动网站如何做
  • 【pytest】使用 marker 向 fixture 传递数据
  • 从0死磕全栈之Next.js 中间件(Middleware)详解与实战
  • 用个人电脑做服务器建网站天门市基础建设网站
  • 分布式专题——26 BIO、NIO编程与直接内存、零拷贝深入辨析
  • Redisson分布式限流
  • 计算机网络-应用层协议原理
  • 分布式文件存储系统FastDFS(入门)
  • 电机控制-PMSM无感FOC控制(五)相电流检测及重构 — 单电阻采样
  • C语言底层学习(4.数据在内存中的存储)
  • 虚幻引擎UE5专用服务器游戏开发-33 在上半身播放组合蒙太奇
  • 织梦网站栏目访问目录做网站建设哪家效益快
  • 『数据结构』消失的数字
  • 鹤山网站建设易搜互联湖南seo
  • ORB_SLAM2原理及代码解析:Tracking::CreateInitialMapMonocular() 函数
  • 【Linux】System V —— 基于建造者模式的信号量
  • VScode-ESP-IDF工程函数定义无法跳转且无注释提示
  • 最新的网站建设软件标书制作员工作内容
  • JAVA SE 基础语法 —— C / 运算符
  • SSM餐饮管理系统uto0o《开发全资源(程序 / 源码 / 数据库)+ 万言论文(文末)+ 系统界面》
  • 上饶市建设厅网站中国最新消息新冠疫苗最新消息
  • 安徽省建设银行网站关于网站建设的意见
  • 免费域名建站青岛网站有限公司