leetcode:3. 无重复字符的最长子串
3. 无重复字符的最长子串
示例 1:
示例 2:
示例 3:
法1:通过暴力破解,遍历一次字符串,每次将新加的字符和字符串比较,有重复,就刷新字符串的左边界,没重复,就继续加。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int left=0,right=1,len=1,res=0;
int s_len=s.length();
if(s_len<2)return s_len; //防止空串和只有一个字符的情况
while(right<s_len){ //遍历整个字符串
for(int i=left;i<right;i++){ //遍历新添加的字符在前边字符串中是否重复
if(s[i]==s[right]){
left=i+1;
len=right-left;
break;
}
}
right++;
len++;
res=max(len,res);
}
return res;
}
};
法2:使用map来大大降低字符查重的时间
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int left=0,right=0,len=0,res=0;
unordered_map<char,int>hash;
int s_len=s.length();
while(right<s_len){ //遍历整个字符串
if(hash.find(s[right])!=hash.end()&&hash[s[right]]>=left){ //若重复
left=hash[s[right]]+1; //更新左边界
len=right-left; //更新长度
}
hash[s[right]]=right; //加入到map里 right++;
len++;
res=max(len,res);
}
return res;
}
};
法3:利用vector数组来代替map,桶排序的思想。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int left=0,right=0,len=0,res=0;
vector<int>v(128,-1);
int s_len=s.length();
while(right<s_len){ //遍历整个字符串 char tempChar=s[right];
if(v[(int)tempChar]>=left){ //如果字符tempChar没出现过,那v[tempChar]值就是 //-1,出现过的话,v[tempChar]就是上次出现的下标了
left=v[tempChar]+1;
len=right-left;
} v[tempChar]=right; //更新v[tempChar]
right++;
len++;
res=max(len,res);
}
return res;
}
};
leetcode:3. 无重复字符的最长子串的更多相关文章
- Leetcode(三)无重复字符的最长子串
3. 无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...
- 【LeetCode】无重复字符的最长子串【滑动窗口法】
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc&quo ...
- [LeetCode] 3. 无重复字符的最长子串
题目链接:(https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/) 题目描述: 给定一个字符 ...
- 【leetcode 3. 无重复字符的最长子串】解题报告
思路:滑动窗口的思想 方法一:滑动窗口 int lengthOfLongestSubstring(string s) { /* 控制一个滑动窗口,窗口内的字符都是不重复的,通过set可以做到判断字符是 ...
- LeetCode 3: 无重复字符的最长子串 Longest Substring Without Repeating Characters
题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. Given a string, find the length of the longest substring withou ...
- Leetcode——3. 无重复字符的最长子串
难度: 中等 题目 Given a string, find the length of the longest substring without repeating characters. 给定一 ...
- 力扣Leetcode 3. 无重复字符的最长子串
无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串 ...
- [LeetCode]3. 无重复字符的最长子串(滑动窗口)
题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc ...
- [LeetCode]3.无重复字符的最长子串(Java)
原题地址: longest-substring-without-repeating-characters/submissions 题目描述: 示例 1: 输入: s = "pwwkew&qu ...
- LeetCode 3. 无重复字符的最长子串(Longest Substring Without Repeating Characters)
题目描述 给定一个字符串,找出不含有重复字符的最长子串的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3. ...
随机推荐
- 数据安全刻不容缓,国产智能化厂商首获SOC 2鉴证报告有何意义?
数据安全刻不容缓,国产智能化厂商首获SOC 2鉴证报告有何意义? 了解SOC 2与ISO 27001的区别,你就知道SOC 2对智能自动化厂商的意义了 文/王吉伟 要问当前组织对于数字化转型的最大顾虑 ...
- Python魔法:20个让你编程事半功倍的奇淫技巧(建议收藏)
Python作为一门灵活.充满技巧的语言,有着很多奇技淫巧,今天小编就跟大家分享一下在平时工作中所积累的技巧,这里面既有语法上的技巧,也有库函数的应用,可以帮助大家在平时的工作中提升效率,规避某些错误 ...
- TR069-STUN
原理 1.NAT穿越技术,为了解决NAT设备对P2P网络的通信限制 2.作用:检测网络中是否存在NAT设备,并获取两个通信端点经NAT设备分配的IP地址和端口号,然后建立一条可穿越NAT的P2P链 ...
- Obsidian 设置快捷键 Ctrl+Shift+J 打开OB(未启动则启动,启动未激活则激活,已激活则最小化)- autoHotKey
Obsidian 设置快捷键 Ctrl+Shift+J 打开OB(未启动则启动,启动未激活则激活,已激活则最小化)- autoHotKey 需求 将Obsidian作为主笔记软件使用,设置个快捷键,配 ...
- java学习 javaz-001 Helloworld 第一个demo
java学习 javaz-001 Helloworld 第一个demo 目录 学习目标 前期准备 java sdk 1.8环境 编辑器IDE的选择 代码开发 目录结构 创建第一个java文件 创建第2 ...
- HDU 2056:Rectangles(两个矩形交点的性质)
一.原题链接 Problem - 2056 (hdu.edu.cn) 二.题面 Given two rectangles and the coordinates of two points on th ...
- AOSP编译成功后关闭终端emulator命令找不到
当我们编译好AOSP系统源码后,可以通过emulator命令打开模拟器,但是当我们关闭终端后,在次打开终端输入emulator命令,提示未找到命令: 此时我们需要重新执行下面语句 source bui ...
- Miracast技术详解(四):Sink源码解析
目录 简介 Sink端源码 RTSP通讯 RTP通讯 播放阶段 MPEG2-TS解析 总结 简介 在<Android Studio导入Android 4.2.2的WiFi-Display系统源码 ...
- 关于全景(360)图片拼接的方法(Opencv3.0 Stitcher)----续(一)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- JS(对象)
一 对象 1.1 对象的相关概念(python中的字典) 什么是对象? 在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串.数值.数 组.函数等. 对象 ...