Какой самый эффективный способ найти длину самого длинного предмета в списке? -- string поле с участием language-agnostic поле с участием list поле с участием coldfusion поле с участием code-golf пол Связанный проблема

What's the most efficient way to find the length of the longest item in a list?


3
vote

проблема

русский

Учитывая список разных слов длины, какой лучший способ найти максимальную длину любых слов?

Например, следующее должно вернуть 6

 <код> findMaxLen("a,set,of,random,words")   


Конечно, это довольно тривиально сделать это ...

 <код> <cffunction name="findMaxLen" returntype="Numeric">     <cfset var CurMax = 0 />     <cfset var CurItem = 0 />     <cfloop index="CurItem" list="#Arguments[1]#">         <cfif Len(CurItem) GT CurMax >             <cfset CurMax = Len(CurItem)/>         </cfif>     </cfloop>     <cfreturn CurMax /> </cffunction>   


или, немного короче ...

 <код> <cffunction name="findMaxLen" returntype="Numeric">     <cfset var CurMax = 0 />     <cfset var CurItem = 0 />     <cfloop index="CurItem" list="#Arguments[1]#">         <cfset CurMax = Max( CurMax , Len(CurItem) ) />     </cfloop>     <cfreturn CurMax /> </cffunction>   


Но есть ли лучший способ - что-то более эффективное?

Возможно, какой-то метод Java? Преобразование в массив и сортировку по длине элемента? Подсчет самый большой разрыв между запятыми?


На практических терминах любой из приведенных выше примеров будут работать нормально для моей текущей потребности, и это не для чего-то, что является критической производительностью, поэтому я не нужно ответ на это , но я думал, что все равно будет интересно посмотреть, что люди могут придумать ...

Английский оригинал

Given a list of assorted length words, what is the best way to find the maximum length of any words?

For example, the following should return 6

findMaxLen("a,set,of,random,words") 


Of course, it's fairly trivial to do this...

<cffunction name="findMaxLen" returntype="Numeric">     <cfset var CurMax = 0 />     <cfset var CurItem = 0 />     <cfloop index="CurItem" list="#Arguments[1]#">         <cfif Len(CurItem) GT CurMax >             <cfset CurMax = Len(CurItem)/>         </cfif>     </cfloop>     <cfreturn CurMax /> </cffunction> 


Or, a little shorter...

<cffunction name="findMaxLen" returntype="Numeric">     <cfset var CurMax = 0 />     <cfset var CurItem = 0 />     <cfloop index="CurItem" list="#Arguments[1]#">         <cfset CurMax = Max( CurMax , Len(CurItem) ) />     </cfloop>     <cfreturn CurMax /> </cffunction> 


But is there a better way - something more efficient?

Perhaps some Java method? Converting to array and sorting by item length? Counting the biggest gap between commas?


In practical terms, either of the above two examples will work fine for my current need, and this isn't for something that is performance critical, so I don't need an answer to this, but I thought it would still be interesting to see what people might come up with...

</div
              
   
   

Список ответов

11
 
vote
vote
Лучший ответ
 

Подсчитайте расстояние между запятыми.

Я ничего не думаю, что может быть быстрее, чем это; Это <код> __declspec(dllimport)1 , а вы имеют , чтобы посмотреть на каждый символ хотя бы раз в любом случае (чтобы увидеть, если это запятая).

 <код> __declspec(dllimport)2  

или я полагаю, вы могли бы просто сказать

 <код> __declspec(dllimport)3  

Если мы играем в игры ...;]

 

Count the distance between commas.

I don't think anything could be faster than that; it's O(n), and you have to look at each character at least once anyway (to see if it's a comma).

int FindLongestWord(char* str) {    char* lastComma = str - 1;    int longest = 0;    int length;    char* pCheckChar;     for(pCheckChar = str; *pCheckChar; pCheckChar++)    {       if(*pCheckChar == ',')       {          length = pCheckChar - lastComma - 1;          if(length > longest)          {             longest = length;          }           lastComma = pCheckChar;       }    }     // Check to see if the last word is the longest    length = pCheckChar - lastComma - 1;    if(length > longest)    {       longest = length;    }     return longest; } 

or I suppose you could just say

"a,set,of,random,words".Split(',').Max(w=>w.Length); 

if we're playing games... ;]

</div
 
 
     
     
2
 
vote

в Perl (предполагая, что у нас есть переменная <код> __declspec(dllimport)4 , в котором должен быть сохраненный ответ):

 <код> __declspec(dllimport)5  

или:

 <код> __declspec(dllimport)6  

или:

 <код> __declspec(dllimport)7  

tmtowtdi, ведь.

Редактировать: я забыл о основных модулях!

 <код> __declspec(dllimport)8  

... который как-то удается быть длиннее других. Ну хорошо!

Редактировать 2: я только что вспомнил <код> __declspec(dllimport)9 :

 <код> #ifdef BUILDING_MY_DLL # define MY_API __declspec(dllexport) #else # define MY_API __declspec(dllimport) #endif template<class TYPE> struct MY_API A {     static TYPE value; }; 0  

Это больше похоже на то, что я ищу.

Редактировать 3: и только для полноты:

 <код> #ifdef BUILDING_MY_DLL # define MY_API __declspec(dllexport) #else # define MY_API __declspec(dllimport) #endif template<class TYPE> struct MY_API A {     static TYPE value; }; 1  
 

In Perl (assuming we have a variable $max in which the answer is to be stored):

(length $1 > $max) && ($max = length $1) while "a,set,of,random,words" =~ /(w+)/g; 

Or:

(length $_ > $max) && ($max = length $_) foreach split /,/, "a,set,of,random,words"; 

Or:

$max = length((sort { length $b <=> length $a } split /,/, "a,set,of,random,words")[0]); 

TMTOWTDI, after all.

EDIT: I forgot about the Core Modules!

use List::Util 'reduce'; $max = length reduce { length $a > length $b ? $a : $b } split /,/, "a,set,of,random,words"; 

...which somehow manages to be longer than the other ones. Oh well!

EDIT 2: I just remembered map():

use List::Util 'max'; $max = max map length, split /,/, "a,set,of,random,words"; 

That's more like what I'm looking for.

EDIT 3: And just for completeness:

($max) = sort { $b <=> $a } map length, split /,/, "a,set,of,random,words"; 
</div
 
 
 
 
1
 
vote

Видеть как есть <код> code-golf тег, вот 52 символа в C #

 <код> "a,set,of,random,words".Split(',').Max(w=>w.Length);   
 

Seeing as there's a code-golf tag, here's 52 characters in C#

"a,set,of,random,words".Split(',').Max(w=>w.Length); 
</div
 
 
 
 
1
 
vote

И вот «короткий» путь CFML - 72 символов ...

 <код> Len(ArrayMax("a,set,of,random,words".replaceAll('[^,]','1').split(',')))   

Другая версия, 78 символов, но обрабатывает огромные струны (см. Комментарии) ...

 <код> Len(ListLast(ListSort("a,set,of,random,words".replaceAll('[^,]','1'),'text')))   
 

And here's the 'short' CFML way - 72 chars...

Len(ArrayMax("a,set,of,random,words".replaceAll('[^,]','1').split(','))) 

Another version, 78 chars but handles huge strings (see comments)...

Len(ListLast(ListSort("a,set,of,random,words".replaceAll('[^,]','1'),'text'))) 
</div
 
 
         
         
0
 
vote

Я видел код для гольфа - вот 54 символов в Python:

 <код> len(max("a,set,of,random,words".split(","), key=len))   
 

I did see the code golf tag - here is 54 characters in Python:

len(max("a,set,of,random,words".split(","), key=len)) 
</div
 
 
       
       
0
 
vote

в Java без строки дополнительных функций. (Просто список связан с псевдоустройством: P) Дайте максимум как 0 в начале

 <код>    int find(LinkedList strings, int max) {       int i;       String s=(String)strings.element();       for(i=0;s.charAt(i)!='';i++);       if(strings.hasNext())          return find(strings.Next(),(i>max?i:max));       return max;     }   

Редактировать: просто заметили, что теперь это дано строку слов, а не список строк, ну неважно, не говорят оставаться здесь одинаковым :)

 

In java without string extra functions. (just a pseudo linked list :P) Give max as 0 in the begining

   int find(LinkedList strings, int max) {       int i;       String s=(String)strings.element();       for(i=0;s.charAt(i)!='';i++);       if(strings.hasNext())          return find(strings.Next(),(i>max?i:max));       return max;     } 

Edit: Just noticed now it's given a String of words not a list of strings, well never mind stays here the same :)

</div
 
 
   
   
0
 
vote

Если вы не беспокоитесь о читабельности ...;)

 <код> String longest(String...ss){String _="";for(String s:ss)if(_.length()<s.length())_=s;return _;}   
 

If you are not worried about readability... ;)

String longest(String...ss){String _="";for(String s:ss)if(_.length()<s.length())_=s;return _;} 
</div
 
 
0
 
vote

Я думаю, это зависит от того, какие эффективные средства. Если это означает наименьшее количество символов в письменном виде, это одно. Если это означает наименьшее количество памяти или самого быстрого выполнения, это другое.

Для быстрой выполнения выполнения я возьму цикл.

 

i guess it depends on what efficient means. if it means the least amount of characters in the code written, that is one thing. if it means, least amount of memory or fastest executing, that is another.

for fastest executing i'll take the loop.

</div
 
 
0
 
vote

в VC ++

 <код> int findMaxLen(const char *s) {     const char c = ',';     int a = 0, b = 0;     while(*s)     {         while(*s && *s++ != c)b++;         if(b > a)a=b;         b = 0;     }     return a; }   
 

in vc++

int findMaxLen(const char *s) {     const char c = ',';     int a = 0, b = 0;     while(*s)     {         while(*s && *s++ != c)b++;         if(b > a)a=b;         b = 0;     }     return a; } 
</div
 
 
0
 
vote

в j

Предположим, что список строк в штуках (L):

 <код> {.:~>#&.>L   

Пример с использованием файла CSV:

 <код> {.:~;>#&.>readcsv'test.csv'   
 

In J

Assume list of boxed strings(L):

{.:~>#&.>L 

An example using a CSV file:

{.:~;>#&.>readcsv'test.csv' 
</div
 
 
 
 
0
 
vote

в Scala (55 символов):

 <код> "a,set,of,random,words".Split(',').Max(w=>w.Length); 0  
 

In scala (55 chars):

",set,of,random,words".split(",").:(0)(_.length max _) 
</div
 
 
0
 
vote

clojure: 49 байт.

 <код> "a,set,of,random,words".Split(',').Max(w=>w.Length); 1  

Разборчивая версия:

 <код> "a,set,of,random,words".Split(',').Max(w=>w.Length); 2  

Я все еще изучаю язык, поэтому я хотел бы услышать любые способы улучшить его.

 

Clojure: 49 bytes.

(def l #(reduce max(for[x(.split%%2)](count x)))) 

Legible version:

(defn longest [astr sep]   (reduce max     (for [word (.split astr sep)]       (count word)))) 

I'm still learning the language, so I'd love to hear any ways to improve it.

</div
 
 
0
 
vote

У меня нет python передо мной, поэтому я не могу проверить эту работу, но ...

 <код> "a,set,of,random,words".Split(',').Max(w=>w.Length); 3  

должен сделать трюк.

 

I don't have Python in front of me so I can't check this works, but...

def maxlen(x):     return len(sorted(x.split(), key=lambda y: len(y))[1]) 

Should do the trick.

</div
 
 
0
 
vote

Разве это не будет проще?

 <код> "a,set,of,random,words".Split(',').Max(w=>w.Length); 4  
 

Wouldn't this be simplest?

<cffunction name="findMaxLen" returntype="Numeric">     <cfset longest = 0>     <cfloop list="#Arguments[1]#" index="w">         <cfif len(w) gt longest>             <cfset longest = len(w)>         </cfif>     </cfloop>     <cfreturn longest> </cffunction> 
</div
 
 
 
 

Связанный проблема

26  Конвертировать строку в ArrayList <Character> в Java  ( Convert string to arraylist character in java ) 
Как преобразовать строку без разделителя в <код> ArrayList<Character> . Моя строка похожа на это: <код> String str = "abcd..." Я знаю, что один из спо...

-3  Слияние строчных различий с доступом SQL / VBA  ( Merge string differences with access sql vba ) 
У меня есть два поля с частично разными строками. Fielda: = "string1" fieldb: = "string1; string2" (Итак, основное отличие между двумя полями является «; stri...

0  PHP Wrage код не работает  ( Php swear code doesnt quite work ) 
У меня есть этот код ниже, который работает ish ish. <код> $swearWords = file("blacklist.txt"); foreach ($swearWords as $naughty) { $post = str_ireplace...

0  Как бы я избавился от определенных персонажей, а затем выпустите очищенную струну в Python?  ( How would i get rid of certain characters then output a cleaned up string in pyt ) 
В этом фрассетере кода я пытаюсь получить ссылки на изображения, размещенные в группеЧанчатке определенным пользователем: <код> import groupy from groupy im...

1  Как извлечь часть из строки в R  ( How to extract a part from a string in r ) 
У меня есть проблема, когда я пытался получить числовую деталь в R. Исходные строки, например, <код> "buy 1000 shares of Google at 1100 GBP" Мне нужно извл...

0  Как я могу хранить разные виды операторов в 2D-массиве в C?  ( How can i store different kinds of operators in a 2d array in c ) 
Я хочу сделать функцию y = f (x) в виде строки и выяснить операторы в нем, чтобы хранить их в 2D-массиве, где каждый операторы будут рассматриваться как разде...

639  Простой способ повторить строку  ( Simple way to repeat a string ) 
Я ищу простого метода или оператора Commons, который позволяет мне повторить несколько строк N Times. Я знаю, что я могу написать это, используя A для цикла...

0  Как нарисовать текст, char by char в lwjgl / slick2d  ( How to draw text char by char in lwjgl slick2d ) 
Я хочу попросить, чтобы кто-то знал, как нарисовать строку, char by char в интервале, например, 0.25SEC? <код> "H" (0.25sec) "e" (0.25sec) "l" (0.25sec) "l"...

18  Проверка на строковое содержимое? Длина строки против пустой строки  ( Checking for string contents string length vs empty string ) 
Что более эффективно для компилятора и наилучшей практики для проверки ли строки пустой? Проверка ли длина строки == 0 Проверка ли строка пуста (strvar =...

71  Разница между строкой и StringBuilder в C #  ( Difference between string and stringbuilder in c sharp ) 
В чем разница между <код> string и <код> StringBuilder ? Кроме того, какие бы некоторые примеры к пониманию? ...

4  Java регулярное выражение границы матча?  ( Java regular expression boundary match ) 
Я нашел следующий вопрос в одном тестовом номере Java <код> Pattern p = Pattern.compile("[wow]*"); Matcher m = p.matcher("wow its cool"); boolea...

1  Как мне найти любую строку Perl?  ( How do i find any string perl ) 
Я новый в Perl, и у меня есть проблема. Я хотел бы найти любую строку в этой части кода: <код> my $change = $item->look_down( _tag=> 'td', class => 'col...

5  AngularJS Дата ввода, позволяющий нулевой вход  ( Angularjs date input allowing null input ) 
относительно новое для Angularjs Я прочитал документацию ввода даты здесь: angularjs Дата ввода даты Он утверждает, что модель (данные входные обязаны) до...

673  Как удалить текст из строки?  ( How to remove text from a string ) 
У меня есть <код> data-123 строка. Как я могу удалить <код> data- из строки при выходе из <код> 123 ? ...

3  Алгоритм быстрее чем BMH (Boyer-Moore-Harspool)  ( Algorithm faster than bmh boyer moore horspool search ) 
Какой алгоритм вы бы использовали для поиска коротких подстроек в коротких текстах? К метку я имею в виду 5-10 символов для подстроки и 255 для строки. Я дума...




© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.