题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
样例
题解
用双端队列deque记录当前子串
用vis数组记录字符是否在当前子串中
如果要新加入字符,如果当前子串中有和新加入的字符一样的字符,就pop_front,知道当前子串中没有和新加入的字符一样的字符
class Solution
{
public:
int vis[300]={0};
deque<char>ss;
int lengthOfLongestSubstring(string s)
{
int ans=0;
int l=0;
for(int i=0;i<s.length();i++)
{
while(vis[s[i]]==1)
{
vis[ss.front()]=0;
ss.pop_front();
l++;
}
ss.push_back(s[i]);
ans=max(ans,(i-l+1));
vis[s[i]]=1;
}
return ans;
}
};
时间复杂度为 O ( n ) O(n) O(n)