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.
解题思路:
- 我们可以建立一个大小为128字符数组,保存每个字符最新出现的位置。用一个start保存子串的起始位置,当遇到重复元素时,start更新为重复元素的下一个元素,代码如下:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
const int ASCII_MAX = 128;
int last[ASCII_MAX];
fill(last, last + ASCII_MAX, -1);
int start = 0;
int maxLength = 0;
int n = s.size();
for(int i = 0; i < n; i++) {
if(last[s[i]] >= start) {
maxLength = max(maxLength, i - start);
start = last[s[i]] + 1;
}
last[s[i]] = i;
}
return max(maxLength, n - start);
}
};