欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Leetcode代码练习(二)

程序员文章站 2022-07-02 17:45:58
首先,没有第二题,没有第二题的原因是,JavaScript中根本就没有那种数据结构,尽管我在playground里面调试出了正确的结果,但是也许是因为数据结构问题,最终没能让我通过。 所以我就抛弃第二题了。 Given a string, find the length of the longest ......

首先,没有第二题,没有第二题的原因是,JavaScript中根本就没有那种数据结构,尽管我在playground里面调试出了正确的结果,但是也许是因为数据结构问题,最终没能让我通过。

所以我就抛弃第二题了。

 

 

Given a string, find the length of the longest substring without repeating characters.

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

 

 

例如:

Given "abcabcbb", the answer is "abc", which the length is 3.

给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。

Given "bbbbb", the answer is "b", with the length of 1.

给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。

 

 

题目里面有几个点需要注意,首先就是没有重复字符,一开始我没看到,吃了好大的亏。然后就是找到的这个字符串得是给定字符串的子串。

下面贴出代码,然后分析一下代码:

 1 var lengthOfLongestSubstring = function(s) {
 2     var i, j;
 3     var len = s.length;
 4     var compareNumber = 0;
 5     for (i = 0; i < len - 1; i++) {
 6         for (j = i + 1; j < len; j++) {
 7             if (s[i] === s[j]) {
 8                 compareNumber = s.slice(i, j).length > compareNumber ? s.slice(i, j).length : compareNumber;
 9                 break;
10             }
11         }
12     }
13     if (compareNumber === 0) {
14         compareNumber = len;
15     }
16     return compareNumber;
17 };

这题不难,关键判断条件是遇到第一个相同的字母,则停下。然后判断新找到子串的长度与之前的最长长度哪一个长,然后令compareNumber等于更长的那个长度。

同时,在取得更长长度之后,退出本轮循环,进行下一轮循环。防止出现字符重复的情况。

最后加了一个if语句,单独判断一次输入字符串为空的情况。

总的来说,只能算是一种行之有效,略微粗暴的方式,并不是本题的最优解。