LeetCode刷题记录
LeetCode-3 无重复字符的最长子串
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/90253f611939489008bfac21428725c9.png)
解题思路:
使用map记录一下最后一次字符在字符串中出现的位置,当第一次重复的时候,先查看字符最后出现的位置是否在start之前:
如果之前的话就忽略不计,
如果在start之后,就需要把start换成重复字符最后出现的位置+1,然后继续重复上述流程。**
class Solution {
public:
int lengthOfLongestSubstring(string s) {
map<char,int> ss;
int start=0;
int end=0;
int len;
int maxlen=0;
if(s=="")
return 0;
if(s.size()==1)
return 1;
for(int i=0;i<s.size();++i)
{
if(ss.find(s[i])==ss.end())
{
ss[s[i]]=i;
len=i-start+1;
maxlen=len>maxlen?len:maxlen;
}
else
{
if(ss[s[i]]<start)
//ss.find(s[i])!=ss.end()&&ss[s[i]]<start
//上面的判断也行,更好理解一点儿
{
ss[s[i]]=i;
//end=i-1;
len=i-start+1;
maxlen=len>maxlen?len:maxlen;
}
else
{
start=ss[s[i]]+1;
ss[s[i]]=i;
}
}
}
return maxlen;
}
};