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值+1while(hash[s[right]] > 1) //当hash值超过1,表示重复了hash[s[left++]]--; //left++,并且将该hash值-1len = max(len, right - left + 1); //更新最大值,需要每次都更新,防止出现一次循环都不进的情况}return len;} };
时间复杂度:O(N) 空间复杂度:O(N)