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

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

时间:2024-05-23 22:26:30浏览次数:9  
标签:子串 字符 temp int count 力扣 length 字串

题目描述

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

题解

滑动窗口的思想:

从左到右遍历每一个位置的字符,temp中保存的是当前计算出来的最长无重复字符的子串,count中保存的是无重复元素的最长字串长度。

初始时,在temp字符串中保存第一个字符,假设现在从第二个字符位置开始遍历,如果当前位置的字符 x 在temp中已有记录,那么说明现在以第一个字符开头的子串已经是最长的无重复元素的子串了,那么就更新count,然后从temp中找出字符 x 出现的位置,然后从该位置之后截取字符串,重新更新字符串temp,接着将下一个要添加进来的字符拼接在字符串末尾,继续向后遍历下一个字符。

代码实现

class Solution {
    public int lengthOfLongestSubstring(String s) {
        if(s.length()==0){
            return 0;
        }
        if(s.length()==1){
            return 1;
        }
        char[] a = s.toCharArray();
        int count = 0;
        int len = s.length();
        StringBuffer temp = new StringBuffer(String.valueOf(a[0]));
        for (int i = 1; i < len; i++) {
            int index = temp.indexOf(String.valueOf(a[i]));
            if(index!=-1) {
                count = Math.max(count, temp.length());
                temp.delete(0, index + 1);
            }
                temp.append(a[i]);
                count = Math.max(count,temp.length());
        }
        return count;
    }
}

知识点

StringBuffer可以delete、append、indexOf但是不可以contains

标签:子串,字符,temp,int,count,力扣,length,字串
From: https://blog.csdn.net/qq_62622854/article/details/139158695

相关文章

  • 力扣 42.接雨水
    题目描述:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例1:输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部分表......
  • 01-Python 图片转字符画
    fromPILimportImage"""将图片转换为字符画图片转字符画是将一张图片转换成由字符组成的图像,通常用于在命令行界面或者文本编辑器中显示。这个过程主要包括以下几个步骤:-读取图片文件-将图片转换为灰度图像-调整图片的尺寸以适应字符画的宽度......
  • 原始配置字符串进行解析并转换为字典
    varconfigPairs=mqttConfig.Split(';').Select(pair=>pair.Split('=')).Where(parts=>parts.Length==2).ToDictionary(parts=>parts[0].Trim(),parts=&g......
  • 字符串——最小表示法
    字符串——最小表示法定义在字符串\(S\)的所有,与其循环同构的字符串\(T\)中,字典序最小的一个。循环同构:字符串\(S\)循环移位,所有可以得到的字符串\(T\)与\(S\)循环同构。暴力枚举与\(S\)循环同构的每一个字符串,比较其字典序。枚举复杂度\(\mathcalO(n)\),字典......
  • 力扣-636. 函数的独占时间
    1.题目题目地址(636.函数的独占时间-力扣(LeetCode))https://leetcode.cn/problems/exclusive-time-of-functions/题目描述有一个单线程CPU正在运行一个含有n道函数的程序。每道函数都有一个位于 0和n-1之间的唯一标识符。函数调用存储在一个调用栈上:当一个函......
  • 字符设备驱动程序
    字符设备驱动程序大多简单的硬件设备都依赖于字符设备驱动程序参考例程:scull驱动程序注:本笔记的内核以4.9.88版本为主scll设计设计驱动程序的第一步:定义驱动程序能够提供的机制,即实现设备的抽象源代码实现:scull0~scull3:由全局(多次打开共享数据)且持久(设备关闭后打......
  • 力扣1542 2024.5.22
    原题网址:此处为链接个人难度评价:1700分析:很惊讶会又在力扣看到区域赛的几乎原题。此题加上一个哈希就是区域赛题目了。回文其实你只需要关注奇偶性。那么你用前缀和,维护[0:i]区间内每个数的奇偶性,此时你可以发现[0:i]和[i:j]的前缀和异或之后,为0的位就说明[i:j]内此位为偶。(也......
  • 力扣2589 5.16
    原题网址:此处为链接个人难度评价:1700分析:原本的想法是按开始时间排序后遍历,然后贪心的把下一段的和这一段的放一起,发现不够放了就把不够的算出来截为新的一段。最后发现其实有后效性。正解的贪心是:按结束时间排序后(当然是升序),贪心的把本段的都放最后。每次放的时候先检查本区......
  • 逗号分开的字符串,统计个数从高到底排序
    usesWinapi.Windows,Winapi.Messages,System.SysUtils,System.Variants,System.Classes,Vcl.Graphics,System.RegularExpressions, functionCompareStrings(List:TStringList;Index1,Index2:Integer):Integer;beginResult:=StrToInt(List.ValueF......
  • 总结全网C#取随机数方法(整型,浮点型,字符串)
    原文链接:https://blog.csdn.net/m0_65636467/article/details/127770112C#取随机数(Random篇)一、整数随机数//10以内的随机整数Randomrd=newRandom();intn=ran.Next(10);//1-100的随机整数intp=rd.Next(1,100);//大于等于1小于100的整数intNext(intmi......