leetcode3:无重复字符的最长字串

题目   


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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成

一、哈希表

时间:4ms 空间:41.2MB

代码

class Solution {
    public int lengthOfLongestSubstring(String s) {
        //Character记录元素,Integer记录元素的位置
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        int max = 0;//记录字串的最大值
        int left = 0;//左指针
        for(int right=0; right<s.length(); right++){
            if(map.containsKey(s.charAt(right))){
                //如果表中存在右指针所指向的元素,则将表中该元素的位置赋予左指针
                //左指针取最大值,即最靠右的位置,保证连续性
                left = Math.max(left,map.get(s.charAt(right)) + 1);
            }
            //将当前右指针所指向的元素和下标存入表中
            map.put(s.charAt(right),right);
            //判断当前字串的最大值
            max = Math.max(max,right-left+1);
        }
        return max;
    }
}

二、set集合+滑动窗口

时间:6ms 空间:41.5MB

代码

class Solution {
    public int lengthOfLongestSubstring(String s) {
        //set集合用于存储每一次连续且不同的元素
        Set<Character> set = new HashSet<>();
        int left=0,right=0,max=0;
        //集合中存储的顺序和字符串是相同的
        while(right<s.length()){
            //当集合中不存在则添加
            if(!set.contains(s.charAt(right))){
                set.add(s.charAt(right));
                right++;
            }
            //若存在则从前开始删除,直到删除相同的元素结束(由if判断)
            else{
                set.remove(s.charAt(left));
                left++;
            }
            //每一次循环都查看一次当前的最大值
            max = Math.max(max,set.size());
        }
        return max;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值