我正在尝试打印出所有最长的字符串,而我所做的只是打印前 2 个字符串 [重复]

Posted

技术标签:

【中文标题】我正在尝试打印出所有最长的字符串,而我所做的只是打印前 2 个字符串 [重复]【英文标题】:I am tryng to print out all longst strngs and what i have managed to do is just print the first 2 strings [duplicate] 【发布时间】:2021-11-14 19:24:42 【问题描述】:

   

let printLongestStrings =(array) =>
let longStr = "";
for(let i = 0; i < array.length; i++)
  if(array[i].length >= longStr.length)
      longStr += array[i];
  
 
return longStr;  
;
console.log(printLongestStrings(["time","ticking","bomb","countup"]));

【问题讨论】:

1) 您将字符串的.length 与字符串进行比较... 2) 您将连接到longStr,这意味着它会越来越长... 3) 您是@987654324 @ing 在第一次迭代中,所以它永远不会尝试超过一个...... 【参考方案1】:

这给了ticking

let printLongestStrings = array => 
  const sorted = array.sort((a, b) => b.length - a.length);
  let i = 0;
  const returned = [sorted[i]];
  while(sorted[i].length == sorted[i+1].length)
    returned.push(sorted[++i]);
  
  return returned;


console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));

【讨论】:

是否可以同时打印刻度和计数,因为它们的长度相同 @NATHANIEL 我已经编辑了答案,请查看【参考方案2】:

您在检查所有字符串之前就返回了

let printLongestStrings = (array) => 
  let longStr = "";
  for (let i = 0; i < array.length; i++) 
    if(array[i].length >= longStr.length)
      longStr = array[i];      
  
  return longStr;
;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));

上面将打印最后一个最长的字符串(即,如果超过 1 个输入是最长的长度,它将只输出最后一个)

如果你想要 所有 的字符串这个长度,下面会工作

let printLongestStrings = (array) => 
  let longLen = 0;
  let longStr = []
  for (let i = 0; i < array.length; i++) 
    if(array[i].length == longLen)
       longStr.push(array[i])
    
    else if(array[i].length > longLen)
      longStr = [];
      longLen = array[i].length;
      longStr.push(array[i])
    
  
  return longStr;
;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));

【讨论】:

我试过使用它,但它只打印最后一个字符串或一个长字符串,理想的结果是打印所有最长的字符串。 @NATHANIEL 查看更新 太棒了 :) 谢谢...关于如何提高我的技能的任何建议? @NATHANIEL 练习。 酷,再次感谢您...可以说我不希望它输出数组?【参考方案3】:

1) 应该有提前返回。最后你应该返回longStr

  return longStr;

2)你应该比较array[i].lengthlongStr.length而不是longStr

array[i].length >= longStr.length 

3) 您应该将最大的字符串分配给longStr。你不应该将它附加到longStr

longStr = array[i].length >= longStr.length ? array[i] : longStr;

let printLongestStrings = (array) => 
  let longStr = "";
  for (let i = 0; i < array.length; i++) 
    longStr = array[i].length >= longStr.length ? array[i] : longStr;
  
  return longStr;
;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));

替代解决方案:您可以使用reduce获得相同的结果

let printLongestStrings = (array) => 
  return array.reduce((acc, curr) => (curr.length >= acc.length ? curr : acc));
;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));

如果你想要最大长度的字符串数组

let printLongestStrings = (array) => 
  let map = new Map(),
    largestLength = 0;

  array.forEach((s) => 
    if (s.length >= largestLength) 
      largestLength = s.length;
      map.has(s.length) ? map.get(s.length).push(s) : map.set(s.length, [s]);
    
  );
  return [...map.get(largestLength)];
;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));

【讨论】:

不应该在输出中包含“滴答”吗?它的长度与“countup”相同。 我想出了相同的解决方案@Andy,但我认为需要 2 轮(循环)才能得到结果。但是我想一口气达到结果,这就是我使用forEachMap的原因 尽管您的解决方案简洁且易于阅读、理解和维护。 我也很无聊,需要做一些有建设性的事情:) 大声笑,那真是太棒了。谢谢@HR01M8055 和@Andy。【参考方案4】:

您可以对您的代码进行一些修改,它会起作用:

    比较时您没有检查longStr 的长度。 您正在从第一次迭代返回。最后返回。 根据您对长度的比较,分配正确的值。 .length 更大的那个。

let printLongestStrings = (array) => 
  let longStr = "";
  for (let i = 0; i < array.length; i++) 
    longStr = (array[i].length >= longStr.length) ? array[i] : longStr;
  
  return longStr;
;
console.log(printLongestStrings(["time", "ticking", "bomb", "countup"]));

【讨论】:

好的,但是有两个相同长度的字符串,但它只打印一个?

以上是关于我正在尝试打印出所有最长的字符串,而我所做的只是打印前 2 个字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

自动布局问题

在 c 中将 char 作为参数传递

为啥此代码会根据缩进打印出不同的内容?

如果你所做的只是把它打印成错误,那么 "捕捉 "异常是不是不好?

我需要为我所做的每一件事都创建一个新的主要功能吗? C++

恢复我所做但尚未推送的所有内容[重复]