题目原文
Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for “abcabcbb” is “abc”, which the length is 3. For “bbbbb” the longest substring is “b”, with the length of 1.
题目的意思是这样的,给定一个字符串,求出最长的无重复的子字符串。
解体思路
首先用一个哈希表来保存字符串中每个字符首次出现的位置,从左往右扫描字符串的时候,如果哈希表中还没有当前字符的初始位置,则更新哈希表,如果已经有了,则把最长子串的初始位置设为当前字符的初始位置(从哈希表中取),同时,记录最长的字串长度。
提交代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int max = 0;
vector<int> pos(128,-1);
int start = -1;
for(size_t i=0;i<s.size();i++)
{
if(pos[s[i]]>start)
{
start = pos[s[i]];
}
if(i-start > max)
{
max = i - start;
}
pos[s[i]] = i;
}
return max;
}
};