Code Signal – 所有最长字符串(all longest strings)

Code Signal – 所有最长字符串(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 中。

 

class Solution:
    def allLongestStrings(inputArray):
        print(inputArray)
       
        longest = 0
        longestArray = []
       
        for i in inputArray:
            if len(i) > longest:
                longest = len(i)
       
        for i in inputArray:
            if len(i) == longest:
                longestArray.append(i)
               
        return longestArray
   
print(allLongestStrings([“aba”, “aa”, “ad”, “vcd”, “aba”]))
No Comments

Post A Comment