Given a string s consisting of words and spaces, return the length of the last word in the string.
A word is a maximal substring consisting of non-space characters only.
給予一個字串 s 是由字母與空白所組成,回傳最後一個字母的字串長度。 單一個字母是僅由非空格字符組成的最大字串。
Example 1:
Input: s = "Hello World" Output: 5 Explanation: The last word is "World" with length 5.
Example 2:
Input: s = " fly me to the moon " Output: 4 Explanation: The last word is "moon" with length 4.
Example 3:
Input: s = "luffy is still joyboy" Output: 6 Explanation: The last word is "joyboy" with length 6.
solution:
1. 宣告一個 array 變數,運用 regex 來處理單一空白與多個空白,並透過 split 來進行切割。
2. 如果 s 的長度為 0,代表不存在文字,故回傳 0。
3. 如果 array 的長度為 0,代表不存在文字,故回傳 0。
4. 如果 array 存在文字則判斷,
4-1 宣告 lastWord 變數為 array.pop(),該陣列中最後一個元素。
4-2 如果這個 lastWord 存在長度,則回傳 lastWord.length。
5. 回傳 0。
Code 1: BigO(n)
var lengthOfLastWord = function(s) { let array = s.split(/\s/); if(s.length === 0) return 0; if(array.length === 0) return 0; while(array.length > 0){ let lastWord = array.pop(); if(lastWord.length > 0) return lastWord.length; } return 0; };
FlowChart:
Example 1
Input: s = "Hello World" array = s.split(/\s/) //["Hello", "World"] lastWord = World lastWord.length = 5 return 5;
Example 2
Input: s = " fly me to the moon " array = s.split(/\s/) //["fly", "me", "to", "the", "moon"] lastWord = moon lastWord.length = 4 return 4;
Example 3
Input: s = "luffy is still joyboy" array = s.split(/\s/) //["luffy", "is", "still", "joyboy"] lastWord = joyboy lastWord.length = 6 return 6;
Code 2: BigO(n)
var lengthOfLastWord = function(s) { let array = s.trim().split(" ") return array[array.length - 1].length; };
Code 3: BigO(n)
var lengthOfLastWord = function(s) { let array = s.trim().split(/\s/) return array[array.length - 1].length; };
String.prototype.trim(): 移除字首和字尾的空白。
const greeting = ' Hello world! '; console.log(greeting); // Expected output: " Hello world! "; console.log(greeting.trim()); // Expected output: "Hello world!";
Array.prototype.pop()
const plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato']; ^ console.log(plants.pop()); // Expected output: "tomato" console.log(plants); // Expected output: Array ["broccoli", "cauliflower", "cabbage", "kale"] ^ plants.pop(); console.log(plants); // Expected output: Array ["broccoli", "cauliflower", "cabbage"]
String.split(/\s+/)
regex => /rules/ regex => \s+ ex. 至少一個空白或多個空白。 regex => /\s+/ ex.呼叫正則函數來判斷至少一個空白或同時多個空白。
正則表達式(Regular Expression,簡稱 RegExp)是用來描述字串模式的工具,可以用來搜尋、匹配、替換等操作。以下是一些常見的正則表達式符號與用法:
字符符號: .:匹配任何單個字符,但不包括換行符。 \w:匹配任何字母、數字、底線字符。相當於 [a-zA-Z0-9_]。 \W:匹配任何非字母、非數字、非底線字符。 \d:匹配任何數字字符。相當於 [0-9]。 \D:匹配任何非數字字符。 \s:匹配任何空白字符,包括空格、制表符、換行符等。 \S:匹配任何非空白字符。 重複符號: *:匹配前面的元素零次或多次。 +:匹配前面的元素一次或多次。 ?:匹配前面的元素零次或一次。 {n}:匹配前面的元素恰好 n 次。 {n,}:匹配前面的元素至少 n 次。 {n,m}:匹配前面的元素至少 n 次,但不超過 m 次。 範圍符號: [abc]:匹配字符 a、b 或 c 中的任意一個。 [a-z]:匹配小寫字母 a 到 z 中的任意一個。 [A-Z]:匹配大寫字母 A 到 Z 中的任意一個。 [0-9]:匹配數字 0 到 9 中的任意一個。 邏輯運算符: |:表示 OR 運算,匹配左右兩邊其中之一。 ():分組,用來限定運算符的作用範圍。 ^:匹配字串開頭。 $:匹配字串結尾。 轉義符號: \:用來轉義特殊字符,使其失去其特殊含義。