双指针O(n)
用状态数组st记录i~j中每个字母出现的次数,如果s[j]在st中未出现,j继续向后扫描;i向后走的时候把st[s[i]]–,维护状态
class Solution {
public:
int longestSubstringWithoutDuplication(string s) {
int res = 0, st[26] = {0};
for(int i = 0, j = 0; i < s.size();i++)
{
while(j < s.size() && !st[s[j] - 'a'])
{
st[s[j] - 'a'] ++;
j ++;
}
res = max(res, j - i);
st[s[i] - 'a'] --;
}
return res;
}
};