题目
Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: “abcabcbb”
Output: 3
Explanation: The answer is “abc”, with the length of 3.
Example 2:
Input: “bbbbb”
Output: 1
Explanation: The answer is “b”, with the length of 1.
Example 3:
Input: “pwwkew”
Output: 3
Explanation: The answer is “wke”, with the length of 3.
Note that the answer must be a substring, “pwke” is a subsequence and not a substring.
解法:
分配一个数组,用于缓存出现的char的位置信息,char即是数组的key,每次读入char,有出现过,则计算两个索引之间的长度,保存出现过的长度的最大值。
代码如下:
int lengthOfLongestSubstring(string s) {
int locs[256];
memset(locs, -1, sizeof(locs));
int idx = -1, max = 0;
for (int i = 0; i < s.size(); i++)
{
if (locs[s[i]] > idx)
{
idx = locs[s[i]];
}
if (i - idx > max)
{
max = i - idx;
}
locs[s[i]] = i;
}
return max;
}