LeetCode 题解 3无重复字符的最长子串

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

  这道题就是理清一个逻辑 (我也是看答案明白的会了就行)  遍历以及遍历操作是不同的 有了这个思想就容易理解了 

//壳子

  public int XXX(String s){

    // 构建 非重复容器  虽然用不到 但是有一点 hash的查询是最快的 或者说是 比数组的查询快的多

    Set<Character> set = new HashSet<>();

    // 构建 所需变量    

    int max = 0 , n = s.length() , rk = -1;

    // 遍历目标

    for(int i = 0; i< n ; i ++){

      // i 不等零说明 已经找到当前位置 不重复最长子串

      if( i! = 0 ){

        //移除前一个 也就是 从字符串首位开始移除至 下一个不重复最长子串首位

        //可以说是遍历思想的一种 永远排除不需要的字符

        set.remove(s.chaAt( i -1 ))

      }

      // 进行遍历操作  

      // rk 是一个标示位   看个人怎么理解 用 -1 比较方便 +1 比较 n +1比较下一位

      while (rk+1<n && !set.contains( rk+1)){

        // 当满足不越界  并且 容器中未重复条件后

        set.add(s.charAt( ++ rk));

        }

      //当遍历操作结束后 一定是出现重复元素或者达到最值 然后进行最大值 计算 

      max = max>(rk - i +1 )? max:(rk -i +1);

    }

   // 循环结束后 返回最值

    return max;

 }

LeetCode 题解 3无重复字符的最长子串

上一篇:Wordpress 4.6 任意命令执行漏洞复现(CVE-2016-10033)


下一篇:redis数据结构