Is there a short way to find the longest string in a string array?
Something like arr.Max(x => x.Length);
?
Brad Mace
27.1k17 gold badges100 silver badges146 bronze badges
asked Jun 29, 2011 at 13:16
0
Available since Javascript 1.8/ECMAScript 5 and available in most older browsers:
var longest = arr.reduce(
function (a, b) {
return a.length > b.length ? a : b;
}
);
Otherwise, a safe alternative:
var longest = arr.sort(
function (a, b) {
return b.length - a.length;
}
)[0];
answered Jun 29, 2011 at 13:36
deceze♦deceze
508k85 gold badges739 silver badges882 bronze badges
2
A new answer to an old question: in ES6 you can do shorter:
Math.max(...(x.map(el => el.length)));
answered Apr 9, 2017 at 9:10
4
I would do something like this
var arr = [
'first item',
'second item is longer than the third one',
'third longish item'
];
var lgth = 0;
var longest;
for (var i = 0; i < arr.length; i++) {
if (arr[i].length > lgth) {
var lgth = arr[i].length;
longest = arr[i];
}
}
console.log(longest);
answered Jun 29, 2011 at 13:33
Jason GennaroJason Gennaro
34.4k8 gold badges65 silver badges86 bronze badges
2
Maybe not the fastest, but certainly pretty readable:
function findLongestWord(array) {
var longestWord = "";
array.forEach(function(word) {
if(word.length > longestWord.length) {
longestWord = word;
}
});
return longestWord;
}
var word = findLongestWord(["The","quick","brown", "fox", "jumped", "over", "the", "lazy", "dog"]);
console.log(word); // result is "jumped"
The array function forEach has been supported since IE9+.
answered Dec 12, 2016 at 21:43
0
In ES6 this could be accomplished with a reduce()
call in O(n)
complexity as opposed to solutions using sort()
which is O(nlogn)
:
const getLongestText = (arr) => arr.reduce(
(savedText, text) => (text.length > savedText.length ? text : savedText),
'',
);
console.log(getLongestText(['word', 'even-longer-word', 'long-word']))
answered Jan 27, 2020 at 17:04
Alex LomiaAlex Lomia
6,59012 gold badges51 silver badges86 bronze badges
6
var arr = [ 'fdgdfgdfg', 'gdfgf', 'gdfgdfhawsdgd', 'gdf', 'gdfhdfhjurvweadsd' ];
arr.sort(function (a, b) { return b.length - a.length })[0];
answered Jun 29, 2011 at 13:35
katspaughkatspaugh
17.3k11 gold badges65 silver badges103 bronze badges
0
function max( input ) {
return input.reduce((a, b) => a.length <= b.length ? b : a)
}
answered Nov 25, 2021 at 20:07
modosmodos
2001 gold badge4 silver badges10 bronze badges
I was inspired of Jason’s function and made a little improvements to it and got as a result rather fast finder:
function timo_longest(a) {
var c = 0, d = 0, l = 0, i = a.length;
if (i) while (i--) {
d = a[i].length;
if (d > c) {
l = i; c = d;
}
}
return a[l];
}
arr=["First", "Second", "Third"];
var longest = timo_longest(arr);
Speed results: http://jsperf.com/longest-string-in-array/7
answered Sep 23, 2012 at 0:52
Timo KähkönenTimo Kähkönen
11.9k8 gold badges71 silver badges112 bronze badges
I provide a functional+recursive approach. See comments to understand how it works:
const input1 = ['a', 'aa', 'aaa']
const input2 = ['asdf', 'qwer', 'zxcv']
const input3 = ['asdfasdf fdasdf a sd f', ' asdfsdf', 'asdfasdfds', 'asdfsdf', 'asdfsdaf']
const input4 = ['ddd', 'dddddddd', 'dddd', 'ddddd', 'ddd', 'dd', 'd', 'd', 'dddddddddddd']
// Outputs which words has the greater length
// greatestWord :: String -> String -> String
const greatestWord = x => y =>
x.length > y.length ? x : y
// Recursively outputs the first longest word in a series
// longestRec :: String -> [String] -> String
const longestRec = longestWord => ([ nextWord, ...words ]) =>
// ^^^^^^^^^^^^
// Destructuring lets us get the next word, and remaining ones!
nextWord // <-- If next word is undefined, then it won't recurse.
? longestRec (greatestWord (nextWord) (longestWord)) (words)
: longestWord
// Outputs the first longest word in a series
// longest :: [String] -> String
const longest = longestRec ('')
const output1 = longest (input1)
const output2 = longest (input2)
const output3 = longest (input3)
const output4 = longest (input4)
console.log ('output1: ', output1)
console.log ('output2: ', output2)
console.log ('output3: ', output3)
console.log ('output4: ', output4)
answered Oct 25, 2018 at 12:59
7
I see the shortest solution
function findLong(s){
return Math.max.apply(null, s.split(' ').map(w => w.length));
}
answered Jan 4, 2017 at 4:44
2
If your string is already split into an array, you’ll not need the split part.
function findLongestWord(str) {
str = str.split(' ');
var longest = 0;
for(var i = 0; i < str.length; i++) {
if(str[i].length >= longest) {
longest = str[i].length;
}
}
return longest;
}
findLongestWord("The quick brown fox jumped over the lazy dog");
answered Nov 21, 2017 at 3:19
Andy SmithAndy Smith
4184 silver badges9 bronze badges
In case you expect more than one maximum this will work:
_.maxBy(Object.entries(_.groupBy(x, y => y.length)), y => parseInt(y[0]))[1]
It uses lodash and returns an array.
answered Mar 13, 2018 at 18:27
Gismo RanasGismo Ranas
5,9833 gold badges27 silver badges39 bronze badges
With ES6 and it support a duplicate string
var allLongestStrings = arrayOfStrings => {
let maxLng = Math.max(...arrayOfStrings.map( elem => elem.length))
return arrayOfStrings.filter(elem => elem.length === maxLng)
}
let arrayOfStrings = ["aba", "aa", "ad", "vcd","aba"]
console.log(allLongestStrings(arrayOfStrings))
answered Aug 6, 2018 at 20:52
Taha AzzabiTaha Azzabi
2,33822 silver badges29 bronze badges
I would do something like this:
function findLongestWord(str) {
var array = str.split(" ");
var maxLength=array[0].length;
for(var i=0; i < array.length; i++ ) {
if(array[i].length > maxLength) maxLength = array[i].length
}
return maxLength;
}
findLongestWord("What if we try a super-long word such as otorhinolaryngology");
answered Dec 26, 2015 at 10:58
Modern browsers support a for...of
loop. The fastest and shortest way to solve this problem in Chrome, Safari, Edge, and Firefox is also the clearest:
let largest = '';
for (let item of arr) {
if (item.length > largest.length) largest = item
}
In IE, you can use Array.forEach
; that’s still faster and clearer than sorting or reducing the array.
var largest = '';
arr.forEach(function(item) {
if (item.length > largest.length) largest = item
});
answered Apr 3, 2020 at 6:06
Dan FabulichDan Fabulich
36.9k40 gold badges138 silver badges174 bronze badges
If you want to know the INDEX of the longest item:
var longest = arr.reduce(
(a, b, i) => arr[a].length < b.length ? i : a,
0
);
(which can be a one-liner for those that love that stuff…. but it’s split up here for readabilty)
answered Feb 21, 2022 at 21:54
lowcrawlerlowcrawler
6,6118 gold badges36 silver badges72 bronze badges
It’s real simple using java 8 (just check that your array is not empty first or process the .get()
specially):
List<String> strings = Arrays.asList(animals);
String longest = strings.stream().
max(Comparator.comparingInt(String::length)).get();
int max = longest.length();
OR, if you just need the length:
int max = strings.stream().map(String::length).max(Integer::compareTo).get();
Or, if you prefer a one-liner, it’s:
String longest = Arrays.asList(animals)
.strings.stream().max(Comparator.comparingInt(String::length)).get();
=AND=
int max = Arrays.asList(animals)
.stream().map(String::length).max(Integer::compareTo).get();
Well, okay.. it’s actually two-liner 🙂 Enjoy!
UPDATE:
Instead of Arrays.asList(animals).strings.stream()
one could use directly Stream.of(animals)
Напишите функцию f19, которая выводит самую длинную строку maxString из массива d19 в out-19. Я попытался, но не получилось. Как определить эту самую длинную строку?
let d19 = ['Your', 'payment', 'method', 'will', 'automatically', 'be', 'charged', 'in', 'advance', 'every'];
let maxString = d19[0];
function f19() {
for (let i = 0; i <d19.length;i++)
if(d19[i]> maxString){
maxString = d19[i]
console.log(maxString)}
}
document.querySelector('.b-19').onclick = f19;
<section>
<p><b>Task 19.</b></p>
<p>Напишите фукнцию f19, которая выводит самую длинную строку maxString из массива d19 в out-19.</p>
<pre>d19 = ['Your','payment','method','will','automatically','be','charged','in','advance','every' ];</pre>
<button class="button-primary b-19">Task-19</button>
<div class="out-19"></div>
</section>
Zyf21 0 / 0 / 0 Регистрация: 26.10.2014 Сообщений: 171 |
||||
1 |
||||
Вычисление самой длинной строки в массиве31.03.2015, 21:31. Показов 4822. Ответов 8 Метки нет (Все метки)
Нужно разработать метод, в котором с клавиатуры вводится массив из n строк символов. Результат работы метода – печать самой длинной строки.Написал программу, но она выдает ошибку “Индекс находился вне границ массива.”Помогите пожалуйста исправит программу.Заранее благодарю.
0 |
programmer403 1 / 1 / 1 Регистрация: 24.09.2013 Сообщений: 25 |
||||||||
31.03.2015, 21:40 |
2 |
|||||||
… первый цикл правильно написал, а вот второй почему-то по другому..
0 |
0 / 0 / 0 Регистрация: 26.10.2014 Сообщений: 171 |
|
31.03.2015, 21:43 [ТС] |
3 |
programmer403, Скажите пожалуйста,нужно строку написанную вами заменить нашу? Я попробовал, но программа все равно не работает. Я i 0 тоже присваивал, но она все равно не работает.
0 |
programmer403 1 / 1 / 1 Регистрация: 24.09.2013 Сообщений: 25 |
||||
31.03.2015, 21:47 |
4 |
|||
Добавлено через 2 минуты
Я i 0 тоже присваивал, но она все равно не работает. а пробовали
0 |
Zyf21 0 / 0 / 0 Регистрация: 26.10.2014 Сообщений: 171 |
||||
31.03.2015, 21:51 [ТС] |
5 |
|||
programmer403, пробовал.Вроде не в этом проблема.Проблема в этой строке
0 |
programmer403 1 / 1 / 1 Регистрация: 24.09.2013 Сообщений: 25 |
||||
31.03.2015, 21:52 |
6 |
|||
В этой сроке вы вводите символы в массив с клавиатуры, я проверил ваш код. Работает стабильно! Для удобства можете добавить
0 |
0 / 0 / 0 Регистрация: 26.10.2014 Сообщений: 171 |
|
31.03.2015, 21:53 [ТС] |
7 |
programmer403, скиньте пожалуйста код который у вас компилировался сюда.
0 |
programmer403 1 / 1 / 1 Регистрация: 24.09.2013 Сообщений: 25 |
||||
31.03.2015, 21:55 |
8 |
|||
Сообщение было отмечено Zyf21 как решение Решение
1 |
0 / 0 / 0 Регистрация: 26.10.2014 Сообщений: 171 |
|
31.03.2015, 21:59 [ТС] |
9 |
programmer403, заработало!Нужно было присвоить ноль и сделать строго меньше а одновременно, а я это делал по отдельности друг от друга. Спасибо вам огромное.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
31.03.2015, 21:59 |
9 |
Самая длинная строка в массиве
Просмотров 1.5к. Обновлено 15 октября 2021
Вводятся строки. Определить самую длинную строку и вывести ее номер на экран. Если самых длинных строк несколько, то вывести номера всех таких строк.
- При считывании строк, каждую из них следует поместить в массив.
- Предположим, что первая строка самая длинная. Присвоим ее индекс переменной.
- Переберем все элементы-строки массива, начиная со второго. Если длина очередной строки больше, чем той, индекс которой записан в переменной (п. 2), то записать в эту переменную индекс текущей строки.
- Снова переберем все элементы массива строк. Если длина очередной строки совпадает с длиной той строки, индекс которой хранится в переменной (п. 2), то вывести ее номер на экран.
Pascal
Самая длинная строка паскаль
const N = 5;
var
ss: array[1..N] of string;
i,ind: byte;
begin
for i:=1 to N do begin
write(i,'-я: ');
readln(ss[i]);
end;ind:=1;
for i:=2 to N do
if length(ss[i]) > length(ss[ind]) then
ind := i;for i:=1 to N do
if length(ss[i]) = length(ss[ind]) then
write(i, ' ');
writeln;
end.
1-я: this is town
2-я: cat walk
3-я: lamp
4-я: blue lamp!!!
5-я: ok
1 4
Язык Си
#include < stdio.h>
#include < string.h>
#define N 5
main() {
char str[N][30];
int i,ind;
for (i=0; i< N; i++) {
printf("%d-я: ",i+1);
gets(str[i]);
}
ind = 0;
for (i=1; i< N; i++)
if (strlen(str[i]) > strlen(str[ind]))
ind = i;for (i=0; i< N; i++)
if (strlen(str[i]) == strlen(str[ind]))
printf("%d ",i+1);
printf("n");
}
Python
# Вариант 1N = 5
a = []
for i in range(N):
print(i+1, end='-я: ')
a.append(input())ind = 0
for i in range(1, N):
if len(a[i]) > len(a[ind]):
ind = ifor i in range(N):
if len(a[i]) == len(a[ind]):
print(i+1)# Вариант 2
N = 5
a = [input(str(i + 1) + '-ая: ') for i in range(N)]
max_len = max([len(i) for i in a])
[print(i+1, end=' ') for i in range(N) if len(a[i]) == max_len]
КуМир
алг самая длиная строка
нач
лит таб ss[1:5]
цел i, id
нц для i от 1 до 5
вывод i, "-я: "
ввод ss[i]
кц
id := 1
нц для i от 2 до 5
если длин(ss[i]) > длин(ss[id]) то
id := i
все
кц
нц для i от 1 до 5
если длин(ss[i]) = длин(ss[id]) то
вывод i, " "
все
кц
кон
Basic-256
N = 5
dim s$(N,20)
for i=0 to N-1
print (i+1)+"-я: ";
input s$[i]
next iind = 0
for i=1 to N-1
if length(s$[i]) > length(s$[ind]) then ind = i
next i
for i=0 to N-1
if length(s$[i]) = length(s$[ind]) then print i+1
next i