注意:string不可以对字符赋值
【模板题】2、求最长无重复字符的子串 LeetCode原题
思路:用两个指针,一个指针用来遍历字符串,两个指针之间保持无重复字符,那么两个指针之间的长度即最大子串的长度。当发现有重复的字符时,先更新ans,另一个指针指向这个字符上一次出现的位置的下一个字符,继续遍历,直到找到最长子串。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
s=" "+s;
int max=0,i=1,idx,count=0,pre=1,j;
map<int,int> mp;
while(i<s.length())
{
if (!mp[s[i]] || mp[s[i]]==0)//当前字符没有在字典中
{
count++;mp[s[i]]=i;i++;//长度+1,记录位置,指针后移
}
else
{
if (count>max)
max=count;
idx=s[i];//获取上一次出现的位置
count=i-mp[idx];//当前长度
for (j=pre;j<mp[idx];j++)//从上次扫描的指针开始的清零,保证两指针之间无重复
mp[s[j]]=0;
pre=mp[idx]+1;//更新j指针
mp[idx]=i;//记录当前字符的位置
i++;
}
}
if (count>max)//更新ans
max=count;
return max;
}
};