题目3 无重复字符的最长子串
一、理解题意
首先明确是最长子串,而不是子序列
也就是必须是连续的串
二、找规律
先想想有什么规律,能让程序走起来
一般字符串的子串问题应该都是两个指针
顺着走一下,会发现一旦在前的右指针遇到的新字符是重复的
那么就需要一直左移左指针直到重复的出去了才能再让右指针继续走
三、数据结构
需要判断字符的是否重复,那就可以用无序的set来判断就行了
用set的find方法,查找某个字符是否到end就可以判断了
(其实我也是刚知道,小本本记下)
PS:还有就是要记下unordered_map的删除和添加的STL函数
int lengthOfLongestSubstring(string s) {
if(!s.size())return 0;
//i指向右端点,left指向左端点
int left = 0, mmax = 0;
unordered_set<char> st;
for(int i = 0;i < s.size();i++){ //循环右端点
while(st.find(s[i]) != st.end()){ //
st.erase(s[left]);
left++;
}
st.insert(s[i]);//不论满足不满足,目标都是把当前的要加进set里
mmax = max(mmax, i + 1 - left);
}
return mmax;
}