zoukankan      html  css  js  c++  java
  • 滑动窗口---字符串的无重复最长子串

    1.题目

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

    2.思路

    思路:滑动窗口

     

    例子:”abcbbcbb”

    start和end初始为0.

    初始化set,里面存放满足滑动窗口的字符。条件是:在start到end这个窗口中不能有重复的字符。

    结果用r表示,初始化为0

    end=0,a不在set中,将a加入到set,扩大窗口,end++,此时start=0,end=1,set=a。r=max(r, end-satrt)=1.

    end=1,b不在set中,将b加入到set,扩大窗口,end++,此时start=0,end=2,set=a,b。r=max(r, end-start) = 2.

    end=2,c不在set中,将c加入到set,扩大窗口,end++,此时start=0,end=3,set=a,b,c。r=max(r, end-start) = 3;

    end=3,b在set中,将s.chartAt(start)为a从set中移除,缩小窗口,start++,此时start=1,end=3,set=b,c。r=max(r, end-start) = 3;

    end=3,b还在set中,将s.charAt(start)为b从set中移除,缩小窗口,start++,此时start=2,end=3,set=c。r=max(r, end-satrt)=3

    end=3,b不在set中,将b加入到set,扩大窗口,end++,此时start=2,end=4,set=c,b

    end=4,b在set中,将s.chartAt(start)为c从set中移除,缩小窗口,start++,此时start=3,end=4,set=b。r=max(r, end-satrt)=3

    end=4,b在set中,将s.chatAt(start)为b从set中移除,缩小窗口,start++,此时start=4,end=4,set=null。r=max(r, end-satrt)=3

    end=4,b不在set中,将b加入到set,扩大窗口,end++,此时start=4,end=5,set=b。r=max(r, end-satrt)=3

    end=5,c不在set中,将c加入到set,扩大窗口,end++,此时start=4,end=6,set=b,c。r=max(r, end-satrt)=3.

    end=6,b在set中,将s.charAt(start)为b从set中移除,缩小窗口,start++,此时start=5,end=6,set=c。r=max(r, end-satrt)=3

    end=6,b不在set中,将b加入到set中,扩大窗口,end++,此时start=5,end=7,set=c,b。r=max(r, end-satrt)=3

    end=7,b在set中,将s.charAt(start)为c从set中移除,缩小窗口,start++,此时start=6,end=7,set=b。r=max(r, end-satrt)=3

    end=7,b在set中,将s.charAt(start)为b从set中移除,缩小窗口,start++,此时start=7,end=7.set=null。r=max(r, end-satrt)=3

    end=7,b不在set中,将b加入到set中,扩大窗口,end++,此时start=7,end=8,set=b。r=max(r, end-satrt)=3

    此时end=8 > 字符串长度。退出。

     

    最后结果为3。

     

    3.代码

    public int lengthOfLongestSubStr(String s) {
            if(s == null) {return 0;}
            int start = 0, end = 0;
            int res = 0;
            HashSet set = new HashSet();
            while(start < s.length() && end < s.length()) {
                if(!set.contains(s.charAt(end))) {
                    set.add(s.charAt(end++));
                    res = max(res, end -start);
                }else {
                    set.remove(s.charAt(start++));
                }
            }
            return res;
    
        }
  • 相关阅读:
    Could not transfer artifact org.apache.maven.plugins:maven-resources-plugin:pom:2.6 from/to central
    SpringMVC详解
    数据库连接池
    事务的隔离级别
    数据库四大特性
    Eclipse自动编码提示设置
    RequestDispatcher.forward转发与HttpServletResponse.sendRedirect重定向
    c#代码混淆
    java反射机制
    (转)redis是什么
  • 原文地址:https://www.cnblogs.com/yq055783/p/14378619.html
Copyright © 2011-2022 走看看