Leecode刷题笔记——3.无重复字符的最长子串

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

示例 1:

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

示例 2:

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

示例 3:

输入: “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

按题意,需要遍历一遍字符串才能够最终确定最长字串,可以考虑采用双指针;
又因为要求无重复,可以考虑使用集合框架HashSet判断字符之间是否重复。
代码如下:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s.length()==1){
            return 1;
        }
        int max=0;
        int temp=0;
        int p=0,q=0;
        HashSet<Character> set=new HashSet<>();
        while(q<s.length()){
            if(!set.contains(s.charAt(q))){
            temp++;
            set.add(s.charAt(q));
            q++;
            
            max=Math.max(temp,max);
            }
            else{
                p++;
                q=p;
                temp=0;
                set.clear();
            }
        }
        return max;
    }

}

原题地址:
Leecode 3.无重复字符的最长子串


版权声明:本文为weixin_45650420原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。