网站英文,wordpress4.0 中文,手机网站跳转怎么办,推广赚佣金的软件排名2023.9.15 本题我用的暴力双层for循环 unordered_set 解决的#xff0c;外循环控制字符起始位置#xff0c;内循环将字符放入 unordered_set#xff0c;并查找有无重复的元素。 用了一个全局变量记录最长字串的长度#xff0c;局部变量count记录当前层循环的最长子串长度…2023.9.15 本题我用的暴力双层for循环 unordered_set 解决的外循环控制字符起始位置内循环将字符放入 unordered_set并查找有无重复的元素。 用了一个全局变量记录最长字串的长度局部变量count记录当前层循环的最长子串长度。 代码如下
class Solution {
public:int lengthOfLongestSubstring(string s) {if(s.size() 0) return 0;int ans 1;for(int i0; is.size(); i){unordered_setchar set;set.insert(s[i]);int count 1;for(int ji1; js.size(); j){if(set.find(s[j]) set.end()) //没找到重复元素{count;set.insert(s[j]);ans max(ans , count);}else break;}}return ans;}
}; 暴力循环每层循环都用了unordered_set可想而知时间和空间消耗都相当高... 看了下别人的解法这题还可以用滑动窗口来做。定义一个left指针指向滑动窗口的最左端for循环的i向前遍历。每当发现重复元素就不断将set头部元素删除直到没有重复元素位置。最后不断更新最长子串的长度即可。 代码如下
class Solution {
public:int lengthOfLongestSubstring(string s) {if(s.size() 0) return 0;queuechar que;int ans 1;int left 0;for(int i0; is.size(); i){while(set.find(s[i]) ! set.end()) //找到重复元素了{set.erase(s[left]);left;}set.insert(s[i]);ans max(ans , i-left1);}return ans;}
};