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

无重复字符的最长子串

时间:2024-01-15 16:00:54浏览次数:26  
标签:子串 字符 last int res start 最长

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

示例 1:

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

示例 2:

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

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
class Solution {
    public int lengthOfLongestSubstring(String s) {
        // 记录字符上一次出现的位置
        int[] last = new int[128];
        for(int i = 0; i < 128; i++) {
            last[i] = -1;
        }
        int n = s.length();

        int res = 0;
        int start = 0; // 窗口开始位置
        for(int i = 0; i < n; i++) {
            int index = s.charAt(i);
            start = Math.max(start, last[index] + 1);
            res   = Math.max(res, i - start + 1);
            last[index] = i;
        }

        return res;
    }
}

 

标签:子串,字符,last,int,res,start,最长
From: https://www.cnblogs.com/springcloud/p/17965565

相关文章

  • 无重复字符的最长子串2
    classSolution{public:intlengthOfLongestSubstring(strings){//哈希集合,记录每个字符是否出现过unordered_set<char>occ;intn=s.size();//右指针,初始值为-1,相当于我们在字符串的左边界的左侧,还没有开始移动int......
  • 汉字数字等多类型字符串中提取数字
    使用正则表达式importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassMain{publicstaticvoidmain(String[]args){Stringinput="你好6.6%";doublenumber=extractNumber(input);System.out.println(n......
  • python 最长有效括号 多种解法
    使用栈:遍历字符串,当遇到左括号时,将其下标压入栈中;当遇到右括号时,如果栈为空,则将当前右括号下标作为新的起始点,否则将栈顶元素出栈,并计算当前有效括号的长度。Python代码示例:deflongest_valid_parentheses(s):stack=[-1]#栈中始终保持一个起始位置max_length=0......
  • 开源字符识别 OCR 引擎推荐
    开源字符识别OCR引擎推荐sea​现代支付架构部经理 Tesseract开源OCR引擎(主存储库) github地址 GitHub-tesseract-ocr/tesseract:TesseractOpenSourceOCREngine(mainrepository) 官方网址 Tesseractdocumentation Tesseract......
  • 一种基于偏移流和纯字符串流来存储和读取字符串列表的方法【C#】
    字符串的存储长度是可变的,在C#中,BinaryWriter和BinaryReader在Write,ReadStirng的时候,都在单个流中字符串的二进制数组前面加了一个二进制数组的长度信息,方便读取的时候,造成了记录字符串的流并不纯粹是字符串的内容。但是,有时候,我们可以,也可能必须记录纯粹的字符串的二进制内容,然后......
  • oracle如果想要在两个拼接字段中间加一些字符该怎么写
    如果想要在两个拼接字段的中间添加一些字符,可以使用字符串连接函数CONCAT或者字符串连接操作符||来实现。以下是两种写法的示例:使用CONCAT函数:SELECTCONCAT(字段1,'添加的字符',字段2)AS拼接结果FROM表名;在上述示例中,你需要将字段1和字段2替换为要拼接的实际字段......
  • 达梦数据库:DM变量的定义与赋值、字符串拼接
    1、变量的定义与赋值SqlServer格式declare@pintset@p=1;达梦数据库格式declarepint;p:=12、字符串拼接的符号连接操作符对两个运算数进行运算,其中每一个都是对属于同一字符集的字符串的求值。它以给定的顺序将字符串连接在一起,并返回一个字符......
  • java中数组和字符串
    数组数组的声明方式:类型[]变量;数组的创建方式:new类型[数组长度]数组的简单声明并且赋值//声明一个数组,它的长度是3String[]arrs=newString[3];arrs[0]="张三";arrs[1]="李四";//访问数组的值System.out.println(arrs[0]);输出的是张三//获取当前数组的长......
  • 「杂谈」字符串 Hash
    我们常用的字符串Hash形如:\[f(s)=\sum_{i=1}^{n}s_i\timesb^{n-i}\bmodp\]但是经常有人写出不正确的Hash。举例说明,以下Hash是不正确的:自然溢出Hash。固定底数和模数,模数是\(2^{64}\)级别的Hash。固定底数和模数,模数数\(2^{32}\)级别的双Hash。具......
  • (△△△)开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动
    描述开发一个坐标计算工具,A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。输入:合法坐标为A(或者D或者W或者S)+数字(两位以内)坐标之间以;分隔。非法坐标点需要进行丢弃。如AA10;......