LeetCode 3.无重复字符的最长子串
LeetCode 3.无重复字符的最长子串
思路🧐:
使用滑动窗口+哈希表,哈希表映射每一个字符串,左右指针表示当前区间,当出现一个字符串那么就将哈希表+1,右指针移动,当哈希表对应位置大于1时,表示重复出现了,左指针移动,然后哈希表对应位置-1,最后再计算距离。
代码🔎:
class Solution { public: int lengthOfLongestSubstring(string s) { int hash[128] = { 0 }; //模拟哈希表 int n = s.size(); int len = 0; for(int left = 0, right = 0; right < n; right++) { hash[s[right]]++; //出现一次,hash值+1 while(hash[s[right]] > 1) //当hash值超过1,表示重复了 hash[s[left++]]--; //left++,并且将该hash值-1 len = max(len, right - left + 1); //更新最大值,需要每次都更新,防止出现一次循环都不进的情况 } return len; } };
时间复杂度:O(N) 空间复杂度:O(N)