# 无重复字符的最长子串

<p>给定一个字符串，请你找出其中不含有重复字符的 <strong>最长子串 </strong>的长度。</p><p> </p><p><strong>示例 1:</strong></p><pre><strong>输入: </strong>s = "abcabcbb"<strong><br />输出: </strong>3 <strong><br />解释:</strong> 因为无重复字符的最长子串是 "abc"，所以其长度为 3。</pre><p><strong>示例 2:</strong></p><pre><strong>输入: </strong>s = "bbbbb"<strong><br />输出: </strong>1<strong><br />解释: </strong>因为无重复字符的最长子串是 "b"，所以其长度为 1。</pre><p><strong>示例 3:</strong></p><pre><strong>输入: </strong>s = "pwwkew"<strong><br />输出: </strong>3<strong><br />解释: </strong>因为无重复字符的最长子串是 "wke"，所以其长度为 3。 
请注意，你的答案必须是 <strong>子串 </strong>的长度，"pwke" 是一个<em>子序列，</em>不是子串。</pre><p><strong>示例 4:</strong></p><pre><strong>输入: </strong>s = ""<strong><br />输出: </strong>0</pre><p> </p><p><strong>提示：</strong></p><ul>	<li><code>0 <= s.length <= 5 * 10<sup>4</sup></code></li>	<li><code>s</code> 由英文字母、数字、符号和空格组成</li></ul>

以下程序实现了这一功能，请你填补空白处内容：

```cpp
int hset[128];
int lengthOfLongestSubstring(char *s)
{
	int i = 0, j = 0;
	int m = 0;
	memset(hset, 0, sizeof hset);
	for (; s[j]; j++)
	{
		___________________;
	}
	return m;
}
```

## template

```cpp
int hset[128];
int lengthOfLongestSubstring(char *s)
{
	int i = 0, j = 0;
	int m = 0;
	memset(hset, 0, sizeof hset);
	for (; s[j]; j++)
	{
		i = hset[s[j]] > i ? hset[s[j]] : i;
		m = m > j - i + 1 ? m : j - i + 1;
		hset[s[j]] = j + 1;
	}
	return m;
}
```

## 答案

```cpp
i = hset[s[j]] > i ? hset[s[j]] : i;
m = m > j - i + 1 ? m : j - i + 1;
hset[s[j]] = j + 1;
```

## 选项

### A

```cpp
i = hset[s[j]] > i ? hset[s[j]] : i;
m = m > j - i + 1 ? m : j - i + 1;
hset[s[j]] = j - 1;
```

### B

```cpp
i = hset[s[j]] > i ? hset[s[j]] : i;
m = m > j - i + 1 ? j - i + 1 : m;
hset[s[j]] = j - 1;
```

### C

```cpp
i = hset[s[j]] > i ? hset[s[j]] : i;
m = m > j - i + 1 ? j - i + 1 : m;
hset[s[j]] = j + 1;
```