LeetCode 探索初级算法-字符串:20 最长公共前缀-20200331

20 最长公共前缀-20200331

题目

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

示例

输入: ["flower","flow","flight"]
输出: "fl"

说明

所有输入只包含小写字母 a-z 。


注意事项

  1. 这相当于一个列表中存放了多个字符串,判断这些字符串的前缀是否一致。

思路一

直接循环,就这个终止条件需要好好想下,可以 try...except...else 来控制。这部分的知识点,我放在下面的知识点复习中了。

修改经历:

1. 没有考虑到空数组的输入。修改下判断。(第一次提交)

  • 解答错误

2. 提交成功。(第二次提交)

  • 执行用时 :48 ms, 在所有 Python3 提交中击败了30.33%的用户
  • 内存消耗 :13.6 MB, 在所有 Python3 提交中击败了5.56%的用户

心得体会:

题目不难,就是耗时有点久。。。

最终代码展示:

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        i, rStr = 0, ''
        if strs == []:
            return ''
        else:
            while True:
                try:
                    itemStr = [x[i] for x in strs]
                except IndexError:
                    break
                else:
                    if itemStr.count(strs[0][i]) == len(strs):
                        rStr += strs[0][i]
                        i += 1
                    else:
                        break
        return rStr

思路二

其实这道题有很多解法,比如二分法等。这里想利用 python 的特点(题解大神的算法)。利用zip函数(这个会在Python 知识点复习中讲到)和set(来判断)。

通过zip(*strs)把解包的每个字符串打包为元组,在判断每个元组不重复元素的长度是不是大于1,大于1就是不相同的。

修改经历:

1. 一次成功。(第一次提交)

  • 执行用时 :28 ms, 在所有 Python3 提交中击败了97.56%的用户
  • 内存消耗 :13.8 MB, 在所有 Python3 提交中击败了5.56%的用户

心得体会:

大神还是大神。。。

最终代码展示:

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        rStr = ''
        for item in zip(*strs):
            if len(set(item)) == 1:
                rStr += item[0]
            else:
                break
        return rStr

你可能感兴趣的:(LeetCode,探索初级算法)