思路:
开辟一个大小为256 * 4的数组作为哈希表存放每个字符最新的下标. 用一个start变量控制最新的开始处, 每次递归都会尝试更新结果. 时间复杂度O(n), 空间复杂度O(1).
int lengthOfLongestSubstring(string s) {
if (s == "") return 0;
int hash[256];
memset(hash, -1, 256 * sizeof(int));
int start = -1, res = 0;
for (int i = 0; i < s.length(); i++) {
// 如果之前的字符串内出现过当前字符, 则把start放到
// 之前出现的当前字符位置, 成为新的开始
if (hash[s[i]] > start)
start = hash[s[i]];
res = max(res, i - start);
hash[s[i]] = i;
}
return res;
}