力扣字符串专题:第五天,拜年回来了,继续肝

离开力扣两三天,手就痒痒啊!完了,彻底中毒了,哈哈哈!!!

今日第一题:力扣第3题

解题思路:

首先肯定想到的是暴力解法,双指针,里外循环一起走,但是这个时间复杂度为O(n2),为了减少时间复杂度,我们让内循环(左指针)不回头的遍历,拿到一个ans的字符子串长度,丢弃左指针的字符,右指针判断下一个位置的字符是否与现在的字符子串内的字符重复,不重复就加进来,重复就不加,左指针继续向右走。直到越界。

代码如下:

class Solution {
    public int lengthOfLongestSubstring(String s) {
        //储存不重复的字符
        Set<Character> hashset = new HashSet<>();
        //将右指针至于左边界的左端
        int right = -1;
        int ans = 0;
        //遍历左指针,记录最长字符子串。扔掉最左边的一个字符,右指针往右走看看是否比上一组字符子串长,长就记录下来
        for(int left = 0; left < s.length(); left++) {
            if(left != 0) {
                hashset.remove(s.charAt(left - 1));
            }
            while(right+1 < s.length() && !hashset.contains(s.charAt(right + 1))) {
                hashset.add(s.charAt(right + 1));
                right++;
            }
            ans = Math.max(ans, right - left + 1);
        }
        return ans;
    }
}

完蛋,晚上遇到一个题,看了别人题解没想明白,哈哈哈,现在脑袋都大了,明天再看看吧,呜呜呜!!!

上一篇:IfcConstructionMaterialResourceTypeEnum


下一篇:贪心算法解决集合覆盖问题