hot100:08无重复字符的最长子串

题目链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

算法思想:

使用滑动窗口的思想来解决,定义两个指针left和right均指向下标0,right指针用来遍历字符串,将right指针对应的元素入窗口,定义一个哈希表,哈希表用来存储对应字符出现的次数,每次入窗口之后要进行判断,判断窗口内是否出现重复字符,如果有重复字符需要出窗口,通过left指针完成出窗口的操作(从哈希表中删除该字符),最后更新结果

public int lengthOfLongestSubstring(String s) {
        int[] hash = new int[128]; //用数组模拟哈希表存放字符

        char[] ch = s.toCharArray();
        int left = 0;
        int right = 0;
        int ret = 0;
        int n = s.length();
        while(right < n) {
            hash[ch[right]]++; //进入窗口
            while(hash[ch[right]] > 1) { //判断
                hash[ch[left++]]--; //出窗口
            }
            ret = Math.max(ret,right - left + 1); //更新结果
            right++; //让下一个字符进入窗口
        }
        return ret;
    }

注意:内层的while循环是进行出窗口的操作,这里的出窗口操作可能要进行多次,所以使用while而不是if

你可能感兴趣的:(OJ题目讲解,哈希算法,散列表,算法,java,leetcode)