[演算法][JavaScript]演算法挑战系列(1)-Longest Substring Without Repeat

Hello!大家好,最近在做Google Code Jam的过程中,不小心迷上了解题的过程XD,所以我又分心去多找了一些关于解演算法的题目网站,于是登愣「就被我找到啦!」如果各位对逻辑思考,然后喜欢燃烧大脑的都可以试着解一些题目,他是有难易度的,所以可以从简单先下手,而且他也有一些关于资料库SQL的题目,也满有难度的(对我而言啦XD),所以我打算把这个过程开一个系列,让我记录下每次解题的过程,然后我PO上来的难度都会选在中以上,简单的我就不在PO上来献丑了,那今天就开始第一篇这个系列吧!

题目名称:Longest Substring Without Repeating Characters
难易度:中
题目内容:输入一个字串,然后找出这个字串中最长,而且又没有重複的子字串,并回传他的长度。
例如:
1.输入abcabcbb,该字串中最长又没有重複字母的子字串就是abc,然后回传他的长度,答案是3。
2.输入bbbbbb,该字串中最长又没有重複字母的子字串就是b,然后回传他的长度,答案是1。
3.输入pwwkew,该字串中最长又没有重複字母的子字串就是wke,然后回传他的长度,答案是3。

那以下开始动工:

//这个function名称是网站预设的var lengthOfLongestSubstring = function(s) {    //宣告一个阵列,用来装不重複的字元。    let arr = [];    //宣告要回传的变数,用来装不重複的字元的字串长度    let maxLen = 0;        //首先跑迴圈,把每个字元都看过    for(let i=0; i<s.length; i++){            //先比较现在这个字母有没有在阵列中        if(arr.indexOf(s[i]) !== -1){            /*如果有的话,因为重複了,所以把从该位置之前的字元都从阵列中拿掉            阵列中保持着在该字串中连续,且不重複的字元*/            arr = arr.slice(arr.indexOf(s[i])+1);        };                //经过判断后把目前这个字元加进阵列中        arr.push(s[i]);                //如果目前阵列的长度,大于目前要回传的最大长度,就把要回传的最大长度更新        if(maxLen < arr.length){            maxLen = arr.length;        }    };        //最后回传    return maxLen;};

当然因为只是解题方式,所以我的绝对不会是唯一,而且最佳的解,如果大家看到我的程式码有任何想法都欢迎告诉我,或是也可以交流看看有没有更好,而且我没有想到的方式,毕竟演算法好玩的地方在大家的想法不同,程式码也会长的不一样XD,好的那第一篇分享解题就到这里,谢谢大家!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章