solution on Find the longest word and return its length

solution on Find the longest word and return its length

找出字符串(可能是一句話)中最長(zhǎng)的單詞并且將其長(zhǎng)度輸出酪我。這個(gè)算法其實(shí)就是讓我們看看字符串中有多少個(gè)詞腕侄,每個(gè)詞有多少個(gè)字母权埠,然后對(duì)這些詞進(jìn)行比較颓屑,找出字母數(shù)最多的那個(gè)詞,并且返回這個(gè)最長(zhǎng)字符數(shù)單詞的長(zhǎng)度。

步驟分析

  • 先把字符串str轉(zhuǎn)為數(shù)組
  • 將數(shù)組的每個(gè)元素長(zhǎng)度轉(zhuǎn)換成一個(gè)新的數(shù)組
  • 將這個(gè)數(shù)組由小到大排序
  • 取此數(shù)組中的最后的數(shù)組,也就是最長(zhǎng)的字符串
  • 將這個(gè)長(zhǎng)度值返回

JavaScript方法

在寫findLongestWord(str)函數(shù)實(shí)現(xiàn)文章開頭所述的功能忧勿,根據(jù)上面的實(shí)現(xiàn)思路,講大致會(huì)用到下面有關(guān)于JavaScript點(diǎn):

  • for
  • String.prototype.split()
  • Array.prototype.sort()
  • Array.prototype.reduce()
  • Math.max()
  • Array.prototype.pop()

其中 String.prototype.split() 主要是用來將字符串str轉(zhuǎn)換成數(shù)組arr瞻讽。比如:

"May the force be with you".split(" ")
//["May","the","force","be","with","you"]

這里需要注意鸳吸,在使用split()方法時(shí),""中間的要有一個(gè)空格(" ")速勇。否則將會(huì)轉(zhuǎn)變成這樣一個(gè)數(shù)組:

"May the force be with you".split(""); 
// ["M", "a", "y", " ", "t", "h", "e", " ", "f", "o", "r", "c", "e", " ", "b", "e", " ", "w", "i", "t", "h", " ", "y", "o", "u"]

Math.max()方法可以很簡(jiǎn)單的從一個(gè)數(shù)組中取出最大的那個(gè)值

Array.prototype.max = function(){
  return Math.max.apply({},this);
}
var arr=[1,45,23,,3,6,3,4,564,45];
arr.max();//564

測(cè)試用例

通過測(cè)試用例是最好的檢測(cè)方法晌砾,檢測(cè)自己寫的函數(shù)是否符合要求,下面提供幾個(gè)測(cè)試用例:

  • findLongestWord("The quick brown fox jumped over the lazy dog")返回6
  • findLongestWord("May the force be with you")返回5
  • findLongestWord("Google do a barrel roll")返回6
  • findLongestWord("What is the average airspeed velocity of an unladen swallow")返回8

實(shí)現(xiàn)方法

for循環(huán)

function findLongestWord(str) { 
// 第1步:將傳給str的值"May the force be with you"轉(zhuǎn)換成數(shù)組 
var array = str.split(' '); 
// 得到數(shù)組 ["May", "the", "force", "be", "with", "you"] 
var longest = 0; 
// 第2步:對(duì)數(shù)組array做遍歷烦磁,并且將符合條件的值賦值給longest 
for (var i = 0; i < array.length; i++) { 
// array.length = 6 

if (array[i].length > longest) { 
// 如果為true,longest值為array[i].length; 
longest = array[i].length;
 } 
 }
  /* * array = ["May", "the", "force", "be", "with", "you"] 
  * array.length = 6 * 
  * 遍歷次數(shù) i = ? i < array.length i++ array[i].length longest array[i].length > longest longest= array[i].length 
  * 1st 0 yes 1 "May".length=3 0 3 > 0 => yes 3 
  * 2nd 1 yes 2 "the".length=3 3 3 > 3 => no 3 
  * 3rd 2 yes 3 "force".length=5 3 5 > 3 => yes 5 
  * 4th 3 yes 4 "be".length=2 5 2 > 5 => no 5 
  * 5th 4 yes 5 "with".length=4 5 4 > 5 => no 5 
  * 6th 5 yes 6 "you".length=3 5 3 > 5 => no 5 
  * 7th 6 no * End Loop */ 
  * // 第3步:輸出最長(zhǎng)詞的長(zhǎng)度 
  * return longest; // 5 }

你可以把前面的測(cè)試示例都運(yùn)行一回养匈,看看是否得到的值是正確的,如果不是个初,那就要檢查一下代碼是不是哪里出錯(cuò)了乖寒。除了上述的方法之外猴蹂,還可以for循環(huán)之后院溺,通過Math.max()直接將數(shù)組arrNum中的最大值取出。如下所示:

function findLongestWord(str){
// 1st:將傳給str的值為:"May the force be with you"轉(zhuǎn)成數(shù)組

// 得到數(shù)組arr=["May","the","force","be","with","you"]
var arrNum[];

// 2st:對(duì)數(shù)組arr做遍歷
for(var i=o; i<arr.length; i++){
// 講數(shù)組arr中每個(gè)元素的長(zhǎng)度length放到一個(gè)新數(shù)組arrNum中
arrNum.push(arr[i].length);

    /* 
     * 遍歷次數(shù) i = ? i < arr.length i++ arr[i] arr[i].length arrNum 
     * 1st 0 yes 1 "May" 3 [3] 
     * 2nd 1 yes 2 "the" 3 [3,3] 
     * 3rd 2 yes 3 "force" 5 [3,3,5] 
     * 4th 3 yes 4 "be" 2 [3,3,5,2] 
     * 5th 4 yes 5 "with" 4 [3,3,5,2,4]      * 6th 5 yes 6 "you" 3 [3,3,5,2,4,3] 
     * 7th 6 no * End Loop 
     */
 }      
 
 // 3st:通過Math.max()取出數(shù)組arrNum中最大值磅轻,并且輸出
 return Math.max.apply(null,arrNum);//5
 }

sort()方法

function findLongestWord(str){
// 1st:將傳給str的值為:"May the force be with you"轉(zhuǎn)成數(shù)組
var strArr=str.split(" ");
//得到數(shù)組arr=["May","the","force","be","with","you"]
var numArr=[];
var sortArr=[];

// 2st: 對(duì)strArr數(shù)組做遍歷珍逸,并把數(shù)組中每個(gè)詞的length放到新數(shù)組numArr中
for(var i=0; i<strArr.length; i++){
numArr[i]=strArr[i].length;
}
// 新數(shù)組:numArr=[3,3,5,2,4,3]

// 3st: 使用sort()對(duì)數(shù)組numArr排序,有小到大
sortArr=numArr.sort(funtion compare(a,b){
return a-b;
});
// 排序后的數(shù)組:sortArr=[2,3,3,3,4,5]

// 4st: 通過pop()取到數(shù)組sortArr中最后一個(gè)值聋溜,賦值給longestWord
var longestWord=sortArr.pop();//5

// 5st: 輸出longestWord
return longestWord;//5
}

或者

function findLongestWord(str) { 
// 第1步:將傳給str的值為:"May the force be with you"轉(zhuǎn)成數(shù)組 
var arr = str.split(' '); 
// 得到數(shù)組 arr = ["May", "the", "force", "be", "with", "you"] 
// 第2步: 通過sort()將數(shù)組arr按由小到大排序 
arr = arr.sort(function(a, b) { 
return a.length - b.length; 
}); 
    /* 
    * a b b.length a.length arr 
    * "May" "the" 3 3 ["May","the"] 
    * "the" "force" 5 3 ["May","the","force"] 
    * "force" "be" 2 5 ["be","May","the","force"] 
    * "be" "with" 4 2 ["be","May","the","with","force"] 
    * "with" "you" 3 4 ["be","May","the","you","with","force"] 
    */ 
// 最長(zhǎng)的字符排在數(shù)組最后 
// 第3步:獲取數(shù)組最長(zhǎng)字符的長(zhǎng)度 
var longestString = arr.pop().length; // 5 
// 第4步:返回最長(zhǎng)字符的長(zhǎng)度 return longestString; // 5 }

reduce()方法
function findLongestWord(str){
// 1st: 將傳給str的值為:"May the force be with you"轉(zhuǎn)成數(shù)組
var strSplit=str.split(' ');

//得到數(shù)組 arr = ["May", "the", "force", "be", "with", "you"];

// 2st: 使用reduce方法谆膳,取得strSplit數(shù)組中最長(zhǎng)的元素
var longestWord = strSplit.reduce(function(longest,currentWord){
return currentWord.length > longestWord ? current : longest;},"");

// 取到最長(zhǎng)的元素longestWord = "force" 
/* 
 * strSplit = ["May", "the", "force", "be", "with", "you"]; 
 * currentWord longest currentWord.length longest.length currentWord.length > longest.length longestWord 
 * "May" "" 3 0 yes "May" 
 * "the" "May" 3 3 no "May" 
 * "force" "May" 5 3 yes "force" 
 * "be" "force" 2 5 no "force" 
 * "with" "force" 4 5 no "force" 
 * "you" "force" 3 5 no "force" 
 */ 
 
 // 第3步. 返回longestWord的length
 return longestWord.length;//5
 // longestWord.length => "force".length =>5
 }

也可以使用reduce()方法和Math.max()方法配合使用:
function findLongestWord(str){
// 1st: 將傳給str的值為:"May the force be with you"轉(zhuǎn)成數(shù)組
var strSplit = str.split(' ');
// 得到數(shù)組strSplit = ["May", "the", "force", "be", "with", "you"];

// 2st: 使用reduce方法,取到strSplit數(shù)組中最長(zhǎng)的元素length撮躁,并且返回
return strSplit.reduce(function(longest,currentWord){
return Math.max(longest, cunrrentWord.length),0);// "force".length => 5
}

總結(jié)

文章中通過幾種不同的方法實(shí)現(xiàn)了:找出字符串(可能是一句話)中最長(zhǎng)的單詞并且將其長(zhǎng)度輸出漱病。主要使用了for、sort()和reduce()方法,當(dāng)然在具體實(shí)現(xiàn)功能過程中杨帽,還運(yùn)用到了JavaScript中的split()漓穿、pop()和Math.max()等方法。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末注盈,一起剝皮案震驚了整個(gè)濱河市晃危,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌老客,老刑警劉巖僚饭,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異胧砰,居然都是意外死亡鳍鸵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門朴则,熙熙樓的掌柜王于貴愁眉苦臉地迎上來权纤,“玉大人,你說我怎么就攤上這事乌妒⌒谙耄” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵撤蚊,是天一觀的道長(zhǎng)古掏。 經(jīng)常有香客問我,道長(zhǎng)侦啸,這世上最難降的妖魔是什么槽唾? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮光涂,結(jié)果婚禮上庞萍,老公的妹妹穿的比我還像新娘。我一直安慰自己忘闻,他們只是感情好钝计,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著齐佳,像睡著了一般私恬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炼吴,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天本鸣,我揣著相機(jī)與錄音,去河邊找鬼硅蹦。 笑死荣德,一個(gè)胖子當(dāng)著我的面吹牛闷煤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涮瞻,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼曹傀,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了饲宛?” 一聲冷哼從身側(cè)響起皆愉,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎艇抠,沒想到半個(gè)月后幕庐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡家淤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年异剥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片絮重。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冤寿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出青伤,到底是詐尸還是另有隱情督怜,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布狠角,位于F島的核電站号杠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏丰歌。R本人自食惡果不足惜姨蟋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望立帖。 院中可真熱鬧眼溶,春花似錦、人聲如沸晓勇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宵蕉。三九已至酝静,卻和暖如春节榜,著一層夾襖步出監(jiān)牢的瞬間羡玛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工宗苍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稼稿,地道東北人薄榛。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像让歼,于是被迫代替她去往敵國(guó)和親敞恋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容