赞
踩
找到无重复的最长连续字符串。
示例1中 abc | bca | cab 都符合题意。输出3即可。
可以使用暴力枚举 + 哈希表,哈希表来判断是否重复,枚举来判断每一种情况,需要开两层for循环,时间复杂度n^2。
假如现在队列中为abc,下一次入队的是字符b,那么b字符就出现了两次,需要出队,直到字符b出现的次数为1次。删除队头a,此时队列为bcb,继续出队变成cb,b出现的次数就变成1次了。
- class Solution {
- public:
- int lengthOfLongestSubstring(string s) {
- int maxq = 0;
- unordered_map<char, int> hash;
- queue<char> q;
- int n = s.size();
-
- for (int i = 0; i < n; i++)
- {
- q.push(s[i]);
- hash[s[i]]++;
- while (hash[s[i]] >= 2)
- {
- char c = q.front();
- q.pop();
- if (hash[c] != 0)
- hash[c]--;
- }
- maxq = max<int>(maxq, q.size());
- }
- return maxq;
-
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。