给定一系列长度不一的单词,找到任何单词的最大长度的最佳方法是什么?

例如,以下应返回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方法?转换为数组并按项目长度排序?算逗号之间最大的差距?

实际上,以上两个示例中的任何一个都可以很好地满足我当前的需求,而这并不是对性能至关重要的事情,因此我不需要对此做出回答,但是我认为这样做仍然很有趣看看人们会想出什么...

最佳答案

计算逗号之间的距离。

我认为没有什么比这更快的了。它是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;
}

或者我想你可以说
"a,set,of,random,words".Split(',').Max(w=>w.Length);

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

10-06 10:35
查看更多