做网站推广前途,仙居建设局网站,电子商务网站策划书模板,网站做第三方支付给定一个字符串 s #xff0c;请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s abcabcbb
输出: 3
解释: 因为无重复字符的最长子串是 abc#xff0c;所以其长度为 3。
示例 2:
输入: s bbbbb
输出: 1
解释: 因为…给定一个字符串 s 请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s abcabcbb
输出: 3
解释: 因为无重复字符的最长子串是 abc所以其长度为 3。
示例 2:
输入: s bbbbb
输出: 1
解释: 因为无重复字符的最长子串是 b所以其长度为 1。
示例 3:
输入: s pwwkew
输出: 3
解释: 因为无重复字符的最长子串是 wke所以其长度为 3。请注意你的答案必须是 子串 的长度pwke 是一个子序列不是子串。
代码如下
class Solution {
public:int lengthOfLongestSubstring(string s) {if(s.size()0){return 0;}unordered_setchar lookup;//哈希表用于存放字符串中所有不重复的字符int maxstr0;//用于记录最大不重复子串的长度int left0;//滑动窗口的左指针for(int i0;is.size();i){//end()函数是最后一个元素的下一个位置所以end()对应的结果一定是元素不在无序集合内//用lookup.find(s[i])查询元素是否在集合内并与end()做一个比较因为lookup.end()是不在集合内所以!说明在集合内就是不在集合内while(lookup.find(s[i])!lookup.end()){lookup.erase(s[left]);//当元素在无序集合内存在时说明元素重复了移除左指针指向的元素left;//左指针向后移}maxstrmax(maxstr,i-left1);//每循环一次更新一次最大不重复子串的长度lookup.insert(s[i]);//当元素不在无序集合内时向无序集合内添加该元素}return maxstr;//最终返回最大值}
};