剑指 Offer 48. 最长不含重复字符的子字符串

package leetcode;

import java.util.HashSet;
import java.util.Set;

public class offer_48 {
    public int lengthOfLongestSubstring(String s) {
        if(s.equals(" ")) {return 1;}
        int maxlength=0;
        int right=0;
        int left=0;
        Set<Character> set=new HashSet<Character>(); 
        //滑动窗口
        while(right<s.length()&&left<s.length()) {
            //找出当前无重复子串的右边界
            while(right<s.length()&&!set.contains(s.charAt(right))) {
                set.add(s.charAt(right));
                //若当前子串不重复,则窗口右边界增加
                right=right+1;
            }
            //更新最大长度
            if(set.size()>maxlength) {
                maxlength=set.size();
            }
            //更新窗口左边界
            if(right<s.length()) {
                while(left<right&&set.contains(s.charAt(right))) {
                    set.remove(s.charAt(left));
                    left=left+1;
                }
            }
        }
        return maxlength;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        offer_48 off=new offer_48();
        System.out.println(off.lengthOfLongestSubstring("pwwkew"));
    }

}

 

posted on 2022-03-11 17:12  一仟零一夜丶  阅读(21)  评论(0)    收藏  举报