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

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

时间:2024-06-01 11:32:57浏览次数:28  
标签:子串 字符 int 重复 长度 最长

给定一个字符串 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 由英文字母、数字、符号和空格组成

 

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int left=0,right=0;
        Map<Character,Integer> map = new HashMap<>();
        int length = s.length();
        int maxLength=0;
        while(right<length){
            if(map.containsKey(s.charAt(right))){
                left = Math.max(left, map.get(s.charAt(right)) + 1);
            }
            map.put(s.charAt(right),right);
            maxLength = Math.max(maxLength,right-left+1);
            right++;
        }
        return maxLength;
    }
}

滑动窗口方法

窗口右端往右滑动,用一个map记录字符和这个字符所在的位置

如果map中有这个字符,那么更新这个字符的位置

如果map中没有这个字符,那么直接存储进去这个字符和位置

我们需要确保left指针移动到重复字符的下一个位置,并且不会回退

每次都重新计算一下左右指针的长度差和原先长度的大小,记录最长的值

 

标签:子串,字符,int,重复,长度,最长
From: https://www.cnblogs.com/ak918xp/p/18225748

相关文章

  • JAVAEE之文件IO_数据流概念,字节流:InputStream、OutputStream,字符流:reader、writer,及实
    什么是数据流 顾名思义,I表示input,O表示output,也就是输入输出流,主要是在程序与文件之间,用于传输数据的通道。既然要传输数据,那么我们需要理解文件和程序之间哪种方向的传输是输入流,哪种传输作为输出流?我们可以举一个例子,如下图所示: IO流是JavaIO中的核心概念。流......
  • 《字符环》
    描述有两个由字符构成的环。请写一个程序,计算这两个字符环上最长连续公共字符串的长度。例如,字符串“ ABCEFAGADEGKABUVKLM ”的首尾连在一起,构成一个环;字符串“ MADJKLUVKL ”的首尾连在一起,构成一个另一个环;“ UVKLMA ”是这两个环的一个连续公共字符串。输入描述......
  • 673. 最长递增子序列的个数
    673.最长递增子序列的个数给定一个未排序的整数数组nums,返回最长递增子序列的个数。注意这个数列必须是严格递增的。示例1:输入:[1,3,5,4,7]输出:2解释:有两个最长递增子序列,分别是[1,3,4,7]和[1,3,5,7]。示例2:输入:[2,2,2,2,2]输出:5解释:最长递增子序......
  • java检测字符串是否包含数字和字母
    在Java中,要检测一个字符串是否同时包含数字和字母,我们可以使用正则表达式(regex)或者通过遍历字符串并检查每个字符来实现。以下是两种方法的详细代码示例:1.方法一:使用正则表达式importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassStringChec......
  • 手写HTML字符串解析成对应的 AST语法树
    先看效果展示如下:HTML模版转成ast语法树后在学习之前,我们需要了解这么一个问题,为什么要将HTML字符串解析成对应的AST语法树。为什么?语法分析:HTML字符串是一种标记语言,其中包含了大量的标签、属性、文本等内容。通过解析HTML字符串,可以将其转换为更易于操作和理解的......
  • java 字符串反射调用类
    步骤流程 步骤说明定义字符串:首先,你需要定义一个字符串,该字符串为你要调用的类的全限定名。通过反射获取类:使用反射机制,根据定义的字符串获取对应的类。调用方法:利用反射获取的类,调用其中的方法。详细步骤定义字符串在你的代码中定义一个字符串,代表要调用的类的全限定......
  • C语言(字符函数和字符串函数)1
                          Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注+收藏,欢迎欢迎~~                           ......
  • Leedcode-反转字符串 II
    自己写的:classSolution:defreverseStr(self,s:str,k:int)->str:#初始化两个空列表:s_li用于存储切分后的字符串片段,res用于存储处理后的片段s_li=[]res=[]#遍历字符串,步长为2*k,切分成每2*k个字符一组的片段并存储在s_li......
  • Leedcode-最长特殊序列 Ⅰ
    自己写的:classSolution:#getMinimumDifference方法接收一个二叉树的根节点root,并返回树中所有节点值的最小差值defgetMinimumDifference(self,root:Optional[TreeNode])->int:#初始化一个列表用于存储树中的节点值myli=[]#使......
  • Java字符串逗号分隔转换List集合
    开发中常用String字符串接收多个用逗号或分号分隔的id,之后再将字符串处理成List<String>集合来方便使用数据。常用方式1.For循环添加Stringstr="123,456,789";List<String>listIds=newArrayList<>();String[]split=str.split(",");for(Strings:split){......