首页 > 其他分享 >力扣---3. 无重复字符的最长子串

力扣---3. 无重复字符的最长子串

时间:2023-02-15 21:22:08浏览次数:40  
标签:子串 力扣 set 字符 重复 max --- 指针

给定一个字符串 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 由英文字母、数字、符号和空格组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

用了滑动窗口(双指针),看到题目,可以很容易想到最长的字串的两边字符相同,内部不包含相同的字符。

右指针不断向右移动,如果遇到某个字符和窗口内部的字符有重复,则左指针移动到重复的位置。

class Solution {
    public int lengthOfLongestSubstring(String s) {
        char[] arr = s.toCharArray();
//        存储答案
        int max = 0;
//        左指针,由于右指针只需要一直向右移动,所以可以直接代替。
        int p1 = 0;
//        存储窗口中的字符
        Set<Character> set = new HashSet<>();
        for (char c : arr) {
//            意味着左指针和右指针指向的字符相同,且两者之间没有相同的字符。
            if (set.contains(c)) {
//                向右移动左指针,不断缩小窗口范围,直到窗口中不含有和右指针所指相同的字符。
                while (set.contains(c)) {
                    set.remove(arr[p1]);
                    p1++;
                }
            }
            set.add(c);
            max = Math.max(max, set.size());
        }
        return max;
    }
}

 

 

标签:子串,力扣,set,字符,重复,max,---,指针
From: https://www.cnblogs.com/allWu/p/17124726.html

相关文章

  • 学习TCPIP(2)-ARP协议
    学习TCPIP(2)-ARP协议ARP协议是这样一个协议:它负责将高层地址(IP地址)映射为底层物理地址(MAC地址)其中,IP地址是针对于TCPIP网络而言的,当目的地是网络A的主机H一个数据包抵......
  • 人物速写随笔---人体基本结构2
    躯干简略解剖     ......
  • 47-代码块,构造器顺序问题
    基本介绍代码化块又称为初始化块,属于类中的成员[即是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过{}包围起来。但和方法不同,没有方法名,没有返回,没有参数,只有方法......
  • Android面试-字节一面
    距离上次跳槽已经过了3年多,突然看到字节的HR来捞。想着自己好久没面了,就打算去试试看。0.准备视频面试,不用去现场真的太赞了。由于项目比较忙,自己又不是特别想跳槽,所......
  • kx-顺序表:在顺序表首部插入元素
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......
  • kx-顺序表:删除顺序表首元素
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......
  • kx-顺序表:删除顺序表中下标为index的元素
    一、定义顺序表结构#defineINIT_SIZE10 ///<顺序表初始容量typedefintseqType; ///<定义顺序表元素类型///@brief顺序表结构定义typedefstructt_sqList{ s......
  • Axios-Vue
    axios中文文档安装npmiaxios基本使用引入importaxiosfrom'axios';使用//GET请求axios({method:'get',url:'http://api/'}).then(res=>{c......
  • js的几种循环方式,key值的解释,数组,对象的检测与更新,input事件,v-model双向数据绑定,过滤
    目录js的几种循环方式v-for可以循环的变量js的循环方式key值的解释数组,对象的检测与更新input事件v-model双向数据绑定过滤案例事件修饰符(了解)按键修饰符表单控制js的几种......
  • java-studyDay03-面向对象
    生成Java帮助文档:命令格式:javadoc–d文件夹名–auther–version*.java//格式/***类描述*@author作者名*@versio......