1. 题目解析
题目链接:3. 无重复字符的最长子串 - 力扣(Leetcode)
这道题目不难理解,就是查找最长的无重复字符的最长子串,
最后返回最长子串的长度即可。
2. 算法原理
第一个想到的当然是暴力解法,我们枚举所有符合0情况的子串即可,
但是肯定还有优化的方法,用暴力大多超时,还没意思,我们来看看该怎么优化:
我们可以使用滑动窗口来优化暴力解法:
首先定义两个指针,让字符进哈希表,如果出现重复字符,就出窗口,知道没有重复字符,
然后我们再继续让字符进哈希表,记录子串的最大长度最后返回即可:
3. 代码编写
class Solution { public: int lengthOfLongestSubstring(string s) { int len = 0; unordered_set<char> win; for(int left = 0, right = 0; right < s.size(); right++) { while(win.find(s[right]) != win.end()) { win.erase(s[left]); left++; } len = max(len, right - left + 1); win.insert(s[right]); } return len; } };
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果感到有所收获的话可以给博主点一个赞哦。
如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~