给定一系列长度不一的单词,找到任何单词的最大长度的最佳方法是什么?
例如,以下应返回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);
如果我们在玩游戏...;]