当前位置:网站首页>LeetCode·3.无重复字符的最长子串·滑动窗口
LeetCode·3.无重复字符的最长子串·滑动窗口
2022-07-29 14:35:00 【小迅想变强】
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/solution/by-xun-ge-v-boaa/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目
示例
思路
解题思路
题目要求我们选择最长无重复的子串,首先得明白子串和子序列的区别
- 子串为字符串中连续的字符,是不可被分割的
- 子序列为字符串中的字符,是可被分割的
- 暴力循环+双指针
要求寻找最大无重复子串,我们定义两个指针i , j 枚举字符串每一个元素,记录两个指针枚举元素的最大数即可
- 滑动窗口+简单哈希表
初始化一个大小为 0 的滑动窗口, 窗口维护只有一个基本原则,窗口中不能出现重复元素,那么怎么知道窗口中有无重复元素呢,定义一个哈希表,记录窗口中元素出现的次数,出现一次元素出现次数+1,当元素出现时,先在哈希表中判断是否出现过。如果出现过那就缩小窗口大小,直至无重复元素出现
代码
暴力循环+双指针
//很久之前写的代码,自己都有点看不懂了。。。那时候还刚刚学c。。
int lengthOfLongestSubstring(char * s){
int len=strlen(s);
int f=0,i,j,max,r=1;
if(len==0)
{
return 0;
}
for(j=1;j<len;j++){//那时候不知道什么滑动窗口,这里其实用到了滑动窗口思路,变量f 作用是缩小左窗口
for(i=f;i<j;i++){
if(s[i]==s[j]){
f=i+1;
break;
}
}
max=j-f+1;
r=r<max?max:r;
}
return r;
}
作者:xun-ge-v
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/solution/by-xun-ge-v-boaa/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
滑动窗口+简单哈希表
int lengthOfLongestSubstring(char * s){
int sLen = strlen(s);
int left=0, right = 0;
int res=0, cnt=0;
int tmp[128] = {0};//定义简易哈希表
while(right < sLen) {//遍历整个字符串,加入滑动窗口
if(tmp[ s[right] ] == 0) {//在哈希表中未出现,说明未加入过,窗口大小+1,同时保存最大窗口大小
tmp[ s[right] ]++;
right++;
cnt++;
res = res > cnt ? res : cnt;
}
else {//在哈希表中出现了,从左边开始缩小窗口,直到没有相同元素为止
tmp[ s[left] ]--;
left++;
cnt--;
}
}
return res;
}
作者:xun-ge-v
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/solution/by-xun-ge-v-boaa/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
时间空间复杂度
边栏推荐
- 用Asm生成Class字节码文件
- 53 LeetCode 】 【. Most architectural array and
- 为什么 ThreadLocal 可以做到线程隔离?
- 疫情之下的裁员浪潮,7点建议帮你斩获心仪offer
- 力扣每日一题-第45天-682. 棒球比赛
- 测试时间的评估:开发时间的1/3~1/2
- 回放线上流量利器-GoReplay
- 基于C语言实现一个社交系统
- 【 LeetCode 】 1. The sum of two Numbers
- Introduction to several methods of making custom welcome interface on Weiluntong touch screen
猜你喜欢
Google Play 政策更新 | 2022 年 7 月
The reason for Apple's official price reduction has been found, and it is also facing declining sales and even inventory problems
国产手机将用户变成它们的广告肉鸡,难怪消费者都买iPhone了
APP为什么用JSON协议与服务端交互:序列化相关知识
工业设备数字孪生技术,解决方案系统平台案例
xss内容总结
一篇适合新手的深度学习综述!
中国互联网科技企业群狼围攻,谷歌终于遭受重挫导致利润大跌,它为推动鸿蒙的发展而后悔...
第4章_2——视图的使用
【C语言】AI三子棋的成长之路
随机推荐
代码越写越乱?那是因为你没用责任链
测试日报怎么写 ?
【 LeetCode 】 350. The intersection of two arrays. II
超好用的PC端录屏软件推荐
【 LeetCode 】 217. Duplicate elements
C语言 5:bool类型,关系表达式,逻辑表达式,分支语句,函数调用机制,break,continue,goto,return/exit跳转语句
RAMAN CONFIGURE 命令都能实现哪些功能
基于C语言仿真实现的粒子火焰系统
【IIC通信】Chap.1(I2C)IIC通信原理、IIC读写时序详解
如何使用SparkSQL做一些简单的数据分析和可视化展示?
ArcGIS Molder Builder模型构建器基本知识
Nacos基础教程
MySQL 是如何实现 ACID 的?
About inner classes
【LeetCode】88. 合并两个有序数组
Map遍历 key-value 的4种方法
【 LeetCode 】 88. Merging two orderly array
回放线上流量利器-GoReplay
带你搞懂 Redis 中的两个策略
kubernetes cks strace etcd