LeetCode03 最长无重复子串

news/2025/2/26 13:27:27

题目
给定一个字符串,找出不含有重复字符的最长子串的长度。
解答
刚开始以为只是一遍遍历后来的字符和前面一样便开始算新子串,给的案例都过了,但是卡在了“dvdf”
后来经过重重试验,暴力循环,不断调整变量作用域,在经过
“ohvhjdml”
“bbbbb”
“abcabcbb”
“pwwkew”
“ppkw”
“ak”
这几个字符串的测试下,暴力法终于通过了,但是用时较长
后来又尝试了哈希表缩边界的方法,相对简洁快速

var lengthOfLongestSubstring = function(s) {

var hash= new hashTable();
let maxl=0;
for(let i=0,j=0; j<s.length;j++)
    {
        hash.containsKey(s[j])&& ( i = Math.max(hash.getValue(s[j]),i));  //重复子串,缩小左边界           
         maxl = Math.max(maxl,j-i+1);
        hash.add(s[j],j+1);
    }
    return maxl; 
};

心得:

  1. 在网上查资料的时候发现比较优雅的条件判断,把没有else的if判断改成与或非判断的表达式,简洁优雅还省时间;
  2. 中间卡的时间比较长的就是“dvdf”和“aab”,在用暴力法解答的时候前者我没有考虑“vdf"的情况,字符串被分隔成了“dv”,“df”,后来又加在字符是字符串唯一的时候的条件判断,后者是判断条件不全字符串被分割成了“a”,“a”,“b”,加了第二个字母等于第一个字母时候的特殊条件判断,暴力法就稳了
  3. 换哈希表的时候参考官方的优化边界方法,后来发现不太理解的地方是最后的j+1,试过把j+1和上面的j-i+1的+1删掉。别的测试都没事,但是无重复的子串会少算一个。目前理解是多少个树和中间的坑的问题

转载于:https://www.cnblogs.com/dadaochangcun/p/9821296.html


http://www.niftyadmin.cn/n/4582048.html

相关文章

deepin系统使用deepin-wine安装exe程序

2019独角兽企业重金招聘Python工程师标准>>> deepin自带原生deepin-wine使用命令如下&#xff1a; deepin-wine QQBrowser.exe deepin-wine QQMusicSetup.exe 默认安装的快捷方式位置&#xff1a; /root/.wine/drive_c/Program Files/Tencent/QQBrowser /home/he/.w…

学英语,累了,困了,不能就那么睡了。

在中国很多人都会英语&#xff0c;而且很多人也能和外国人进行流畅的交流&#xff0c;由于学习方法&#xff0c;学习效率&#xff0c;学习努力程度不同&#xff0c;所以达到英语流畅交流的时间就不一样。但至少让我们知道英语so easy的。在这个互联网时代&#xff0c;英语以其简…

用Python开发一款王者荣耀的“脚本”!上王者轻轻松!

https://blog.csdn.net/qq_42156420/article/details/80496607?utm_sourceblogkpcl1

Metasploit框架问题

1、使用nmap 扫描SMB服务漏洞信息 nmap -P0 --scriptsmb-check-vulns 10.10.15.123 2、sql语句绕过后台 这部分我待会补充 只有尽可能的过滤&#xff0c;没有绝对的过滤。所以说构造sql语句至关重要 转载于:https://www.cnblogs.com/xinxianquan/p/9773422.html

UML九种图

UML&#xff0c;统一建模语言,刚开始学UML 的时候我就在想 UML这些个图都在软件工程的什么阶段使用呢&#xff1f;是在概要设计还是用户分析之后&#xff1f;不知道大家有没有这个问题。然而遇到了问题&#xff0c;我就去上网查了查相关的资料&#xff0c;一般是在系统分析阶段…

通过C#理解多态

很多人都知道面向对象有三个主要的特点&#xff1a;封装、继承和多态&#xff0c;老师还说这三个特性的顺序不能记错。 要先对数据和细节进行封装封装后的结果就是只提供接口&#xff0c;隐藏实现细节。 我看C#视频的时候楚老师说“多态可以通过继承抽象类和实现接口来体现”&a…

进程池中的回调函数

# 回调函数# 指定一个任务后、并且指定一个回调函数后&#xff0c;当指定的进程池执行的任务结束后&#xff0c;会将该任务的返回值作为回调函数的参数传递到回调函数中&#xff0c;并且回调函数得以执行# 回调函数在主进程中被执行# import os # from multiprocessing import …

运算符重载(OperatorOverloads)C#语言

既然学到这儿了&#xff0c;就把运算符重载&#xff08;OperatorOverloads&#xff09;学明白。 以楚老师讲的一个例子为例 写一个矢量类&#xff08;Vector&#xff09;&#xff0c;在定义三个类对象vect1、vect2、vect3。通过数学可以了解到向量之间是可以进行加法操作的。…