题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
出处
思路
使用双指针构成一个滑动窗口,维护窗口内的字符不重复,逐步右移右指针,当右指针所指元素已经在窗口内时,左指针右移到和右指针所指元素重复的位置的右侧。
每次右移右指针会使窗口增大,右移左指针会使窗口减小,最后返回窗口的历史最大值。
代码
class Solution {
public:int lengthOfLongestSubstring(string s) {if(s.length()<2)return s.length();int maxl=1;vector<char> v;int left=0,right=left+1;v.emplace_back(s[left]);while(right<s.length()) {if(find(v.begin(),v.end(),s[right])==v.end()){v.emplace_back(s[right]);right++;maxl=max(right-left,maxl);}else{while(s[left]!=s[right]&&left<right){v.erase(find(v.begin(),v.end(),s[left]));left++;}left++;right++;}}return maxl;}
};