查找列表中最长项目长度的最有效方法是什么?

Pet*_*ton 3 language-agnostic string coldfusion code-golf list

给出各种长度单词的列表,找到任何单词的最大长度的最佳方法是什么?

例如,以下应返回6

findMaxLen("a,set,of,random,words")
Run Code Online (Sandbox Code Playgroud)


当然,这样做是相当微不足道的......

<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>
Run Code Online (Sandbox Code Playgroud)


或者,更短一点......

<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>
Run Code Online (Sandbox Code Playgroud)


但是有更好的方法 - 更高效的东西吗?

也许是一些Java方法?转换为数组并按项目长度排序?计算逗号之间的最大差距?


在实际应用中,无论是上述两个例子将罚款我目前的需求,这是不适合的东西是性能的关键,所以我并不需要一个答案,但我认为这仍然将是有趣的看看人们会想出什么......

Dan*_*ant 11

计算逗号之间的距离.

我认为没有什么比这更快; 它是O(n),你必须至少看一次每个角色一次(看它是否是一个逗号).

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;
}
Run Code Online (Sandbox Code Playgroud)

或者我想你可以说

"a,set,of,random,words".Split(',').Max(w=>w.Length);
Run Code Online (Sandbox Code Playgroud)

如果我们正在玩游戏......;]