[JavaScript 刷題] Code Signal - 所有最長字串(all longest strings)
題目地址:All Longest Strings
題目
如下:
Given an array of strings, return another array containing all of its longest strings.
Example:
For inputArray = ["aba", "aa", "ad", "vcd", "aba"], the output should be allLongestStrings(inputArray) = ["aba", "vcd", "aba"].
Input/Output:
-
[execution time limit] 4 seconds (js)
-
[input] array.string inputArray
A non-empty array.
Guaranteed constraints:
1 ≤ inputArray.length ≤ 10,1 ≤ inputArray[i].length ≤ 10. -
[output] array.string
Array of the longest strings, stored in the same order as in the
inputArray
解題思路
這道題其實和 Leetcode 里面的 兩數之和 感覺很像,解題思路都是相似的,所以這里選擇使用 JavaScript 中的 Map 去實作,主要還是因為 JavaScript 中的 Map 可以存盤多種資料格式,可以直接進行比對,不用擔心型別轉換的問題,另外也可以熟悉一下對 Map 的操作,
當然,JavaScript 中,如果 字串(string) 和 數字(number) 進行比較的話,也會進行隱式轉換,將字串轉為數字進行比對,
所以本質上來說,這里使用 Map 還是物件,差別都不是很大,
主要的解題思路就是使用字串的長度作為 key,包含字串的陣列作為 value,將鍵值對存盤到 Map/物件中,最后遍歷 Map/物件 尋找到字串長度最長的那個陣列,
時間復雜度為 O ( n ) O(n) O(n),需要遍歷所有的陣列一次,
空間復雜度為 O ( n ) O(n) O(n),因為陣列中所有的資料都會以鍵值對的的方式存盤到 Map 中,
使用 JavaScript 解題
function allLongestStrings(inputArray) {
const map = new Map();
for (const input of inputArray) {
if (map.has(input.length)) {
map.get(input.length).push(input);
} else {
map.set(input.length, [input]);
}
}
let longestNum = -1,
longestArr = [];
for (const [key, value] of map.entries()) {
if (key > longestNum) {
longestNum = key;
longestArr = value;
}
}
return longestArr;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/297850.html
標籤:其他
上一篇:jQuery效果-影片
下一篇:axios -- axios 是什么 & axios 特點 & json-server的介紹與服務搭建 & axios 引入
