题目要求
做题链接3.无重复字符的最长子串
解题思路
我们通过参考给出的输入很容易就会从每一个字符开始,看看最长能延续多长。我们通过画图发现一旦一个字符可以延续到另一个字符,那么我们就不需要考虑他中间仍然存在字符重复的问题。因此而后我们发现可以使用滑动窗口进行优化。
代码实现
class Solution
{
public:
int lengthOfLongestSubstring(string s)
{
//哈希表标记次数,只要26个字母使用哈希数组
int hash[255]={0};
//滑动窗口解决问题
int left=0,right=0;
//最大长度
int len=0;
while(right<s.size())
{
//进窗口
hash[s[right]]++;
//判断出窗口,更新结果
while(left<right&&hash[s[right]]>1)
{
//更新结果
len=max(len,right-left);
//出窗口
hash[s[left++]]--;
}
right++;
}
//整体都是字串的情况
len=max(len,right-left);
return len;
}
};