Problem
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for “abcabcbb” is “abc”, which the length is 3. For “bbbbb” the longest substring is “b”, with the length of 1.
Answers
Complexity: O(n)
Iterate through the string given from the beginning to the end and record the count of the occurences of every character using a set.
If the count of one letter is bigger than 1, delete all the elements from the set in the sequential order of the given string til the count of that letter equal 1.
Code
#include <set>
#include <algorithm>
using namespace std;
class Solution {
public:
int lengthOfLongestSubstring(string s) {
set<char> dic;
int ans = 0;
for (int i = 0, j = 0; i < s.size(); ++i) {
char ch = s[i];
if (dic.count(ch) == 1) {
do {
dic.erase(s[j]);
}while (s[j++] != ch);
}
dic.insert(ch);
ans = max(ans, i - j + 1);
}
return ans;
}
};