Какой самый эффективный способ определить длину самого длинного элемента в списке? - PullRequest
3 голосов
/ 02 марта 2009

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

Например, следующее должно возвращать 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>

1011 *
*

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

<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-метод? Преобразование в массив и сортировка по длине элемента? Считаете самый большой разрыв между запятыми?


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

Ответы [ 14 ]

0 голосов
/ 03 марта 2009

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

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

0 голосов
/ 03 марта 2009

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

String longest(String...ss){String _="";for(String s:ss)if(_.length()<s.length())_=s;return _;}
0 голосов
/ 03 марта 2009

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

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

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

0 голосов
/ 02 марта 2009

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

len(max("a,set,of,random,words".split(","), key=len))
...