引言:本文主要分析LeetCode第三题,Python和C++实现;并进行了哈希优化和数组桶优化。
题目
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例
示例 1:
1 | 输入: s = "abcabcbb" |
示例 2:
1 | 输入: s = "bbbbb" |
示例 3:
1 | 输入: s = "pwwkew" |
示例 4:
1 | 输入: s = "" |
提示:
- 0 <= s.length <= 5 * 104
- s由英文字母、数字、符号和空格组成
分析
1.设置两个游标,采用滑动窗口,右游标一直右滑,每滑动一位,从左游标开始遍历查找与右游标相等的值,如果找到,左游标移到相等位置的下一位,更新长度
实现
python
1 | def lengthOfLongestSubstring(self, s: str) -> int: |
c++
1 | int lengthOfLongestSubstring(string s) { |
可以使用哈希对查找相等元素进行优化
1 | int lengthOfLongestSubstring(string s) { |
拓展
-
map操作,find与count的区别
-
map与unordered_map的区别,到底哪个快?
-
利用数组进行桶优化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20int lengthOfLongestSubstring(string s)
{
int start(0), end(0), length(0), result(0);
int sSize = int(s.size());
vector<int> vec(128, -1);
while (end < sSize) {
char tmpChar = s[end];
if (vec[int(tmpChar)] >= start)
{
start = vec[int(tmpChar)] + 1;
length = end - start;
}
vec[int(tmpChar)] = end;
end++;
length++;
result = max(result, length);
}
return result;
}