Consecutive strings

链接

CodeWar-Consecutive strings

题目

你将会得到一个字符串数组strarr以及一个整数k。你的任务是返回一个由k个数组中连续字符串组成的第一个最长的字符串。

longestConsec(["zone", "abigail", "theta", "form", "libe", "zas", "theta", "abigail"], 2); // return "abigailtheta"

n表示字符串数组的长度,如果 n = 0 或者 k > n 或者 k <= 0 返回""。

我的思路及实现

function longestConsec(strarr, k) {
    var n = strarr.length;
    if (n == 0 || k > n || k <= 0) {
        return "";
    } else {
        var str_max = "";
        for (var i = 0; i < strarr.length; i++) {
            var str = "";
            for (var j = 0; j < k; j++) {
                str = str + strarr[j + i];
            }
            if (str.length > str_max.length) {
                str_max = str;
            }
            if (strarr.length - i - k == 0 ){
                break;
            }
        }
        return str_max;
    }
}

Best Practice

function longestConsec(strarr, k) {
    var longest = "";
    for(var i=0;k>0 && i<=strarr.length-k;i++){
      var tempArray = strarr.slice(i,i+k);
      var tempStr = tempArray.join("");
      if(tempStr.length > longest.length){
        longest = tempStr;
      }
    }
    return longest;
}
function longestConsec(strarr, k) {
  if (k <= 0 || k > strarr.length) {
    return '';
  }
  
  return strarr.reduce((long, item, i) => {
    const currString = strarr.slice(i, i + k).join('');
    return (currString.length > long.length)
      ? currString
      : long;
  }, '');
}
function longestConsec(strarr, k) {
  if( strarr.length==0 || k> strarr.length || k <1 ) return "";
  let lens = strarr.map( (_,i,arr) => arr.slice(i,i+k).join('').length ),
      i = lens.indexOf( Math.max(...lens) );
  return strarr.slice(i,i+k).join('')
}