标题看起来有歧义,不过举两个例子就清楚了。
题目描述:找出一个字符串中连续出现最多的最长子串。比如abcdfeatecabcdlkxabcd中出现最多的是abcd。
由于没有说明ababa中的aba算出现一次还是出现两次,我这把它当作出现两次,最长字串即aba。子串是两个字符以上才算子串,即ssssssss最长子串为ss。
代码如下:
String.prototype.mostLongest = function() { var str = this, strLenth = str.length, longStr = [], maxNum = 1, maxLength = strLenth, arr = [], count = function(num) { for ( var i = strLenth - num + 1; i > -1 ; i--) { var temp = str.substr(i, num); arr[temp] = ~~arr[temp] + 1; if (arr[temp] > maxNum) { maxNum = arr[temp]; longStr = []; longStr.push(temp); maxLength = num; } else if (arr[temp] == maxNum) { if (num > maxLength) { maxNum = arr[temp]; longStr = []; longStr.push(temp); maxLength = num; }else if(num === maxLength){ longStr.push(temp); } } } num > 2 && count(num - 1); }; count(strLenth); return longStr; } |