• 力扣刷题03--无重复字符的最长字串


    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

    示例 1:

    输入: "abcabcbb"
    输出: 3 
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    

    示例 2:

    输入: "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
    

    示例 3:

    输入: "pwwkew"
    输出: 3
    解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
         请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
    思路:sliding window(滑动窗口)
    1、创建一个set
    2、两个指针(第一个指向字符串的开头-j 第二个随着for循环遍历字符串 -i)
    3、如果set里没有s[i],说明目前为止还没有重复的字符,把s【i】添加到set里。然后更新最大不重复字符的数量。
    4、如果set里有s【j】,则从set里开始删除s【j】并且递增,在检查set里是否有s【i】。
    5、重复步骤3和4,直到遍历完整个字符串。

    代码
    class Solution {
    public:
        //写一个比较大小的函数
        int max(int x,int y)
        {
            if(x>y)
            {
                return x;
            }
            else{
                return y;
            }
        }
    //滑动窗口
        int lengthOfLongestSubstring(string s) {
            set<int> s1; //创建一个set集合
            int i=0; //指针i指向0
            int j=0; //指针j指向0
            int maxlength=0; //记录最大长度
            if(s.length()==0)  //特殊情况 s长度为0直接返回
            {
                return 0;
            }
            for(i;i<s.length();i++) 
            {
                if(!s1.count(s[i]))  //判断若set集合中没有s[i]元素则将其添加到set集合中
                {
                    s1.insert(s[i]); //添加到set集合中
                    maxlength=max(maxlength,s1.size()); //比较maxlength与set集合的长度 将较大的数值付给maxlength
                }else{
                    while(s1.count(s[i])) //若set集合中有s[i]元素 则代表出现了重复元素 我们需要删除第一个元素(即由j所记录的位置的元素 同时j++ 并且将s[i]加入set集合中)
                    {
                        s1.erase(s[j]);
                        j++;
                    }
                    s1.insert(s[i]);
                }
            }
            return maxlength; //返回maxlength
    
    
        }
    };
    

      

    附:set在c++的一些用法
    创建集合: set<int> set1;
    检查set集合中是否有某个元素:set1.count(10) 若有返回1 无则返回0
    向set集合中添加一个元素:set1.insert(10)
    在set集合中删除一个元素:set1.erase(10)
    获取set集合长度:set.size()
  • 相关阅读:
    angluar 判断后跳转加参数
    angular 返回上一页
    angular 组件跳转组件 并传参数
    angluar 表单提交时候报错
    angular 中获取select选中的值
    javascript
    将数据渲染到页面的方式:模版
    将数据渲染到页面的几种方式
    跨域
    ajax
  • 原文地址:https://www.cnblogs.com/1061321925wu/p/13966549.html
Copyright © 2020-2023  润新知