标签:map hash Lc3 ++ max 字串 res 最长
链接:无重复最长字串
步骤:
定义两个指针i
,j
表示当前扫描到的字串是[i,j]
(闭区间)扫描过程中维护一个哈希表unordered_map<char,int> hash
表示[i, j]
中每个字符出现的次数、
- 指针j 向后移动一位,同时将哈希表中
s[j]
的次数 +1hash[s[j]] ++
- 假设
j
移动的当前区间[i, j]
中没有重复字串, 一旦j
移动后那么只有s[j]
出现了2次,不断移动i
直到区间中s[j]
的个数等于1为止。
时间复杂度:O(n)
int lengthOfLongestSubstring(string s) {
unordered_map<char, int> hash;
int res = 0;
for (int i = 0, j = 0; j < s.size(); j ++) {
hash[s[j]] ++;
while(hash[s[j]] > 1) hash[s[i ++]] --;
res = max(res, j - i + 1);
}
return res;
}
let map = new Map(), max = 0;
for (let i = 0, j = 0; j < s.length; j ++) {
if (map.has(s[j])) {
i = Math.max(map.get(s[j]) + 1, i);
}
max = Math.max(max, j - i + 1);
map.set(s[j], j);
}
return max;
标签:map,hash,Lc3,++,max,字串,res,最长 来源: https://blog.csdn.net/weixin_43509985/article/details/118002430
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。