int lengthOfLongestSubstring(string s) {
if (s.empty())
return 0;
int i, len, max_len, n;
max_len = 1;
int all_chars[26] = {0};
for (i = 0; i < s.size(); ++i) {
n = s[i] - 'a';
if (0 == all_chars[n])
all_chars[n] = i + 1;
else {
len = count_chars(all_chars, sizeof(all_chars) / sizeof(int), n);
all_chars[n] = i + 1;
if (len > max_len)
max_len = len;
}
}
len = count_chars(all_chars, sizeof(all_chars) / sizeof(int), n);
max_len = len > max_len ? len : max_len;
return max_len;
}
int count_chars(int *p, int len, int n) {
if (!p || len < 1 || n >= len)
return 0;
int max_len = 0;
for (int j = 0; j < len; ++j) {
if (p[j] > 0)
++max_len;
if (p[j] < p[n])
p[j] = 0;
}
return max_len;