码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode代码练习(二)

时间:2018-03-06 23:24:15      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:循环   rac   子序列   ==   原因   等于   条件   出现   note   

首先,没有第二题,没有第二题的原因是,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语句,单独判断一次输入字符串为空的情况。

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

Leetcode代码练习(二)

标签:循环   rac   子序列   ==   原因   等于   条件   出现   note   

原文地址:https://www.cnblogs.com/menmenbule/p/8516931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!