leetcode-最长公共前缀-笔记

原问题链接https://leetcode-cn.com/problems/longest-common-prefix/

最初解法

思路

随便选择一个字符串作为标准,把它的前缀串,与其他所有字符串进行判断,看是否是它们所有人的前缀子串。

效率

执行用时 :44 ms, 在所有 python3 提交中击败了85.15% 的用户
内存消耗 :13.8 MB, 在所有 python3 提交中击败了5.53%的用户

代码

    def longestCommonPrefix(self, strs: List[str]) -> str:
        re = ''
        if (strs ==[])or(strs[0]==''):
            return ''
        if len(strs)==1:
            return strs[0]
        for i in strs[0]:
            re += i
            for j in strs[1:]:
                if j.startswith(re):
                    continue
                else:
                    return ''.join(re[:-1])
        return ''.join(re)

优化1

思路

纵向扫描:从下标0开始,判断每一个字符串的下标0,判断是否全部相同。直到遇到不全部相同的下标。时间性能为O(n*m)

效率

执行用时 :40 ms, 在所有 python3 提交中击败了94.17% 的用户
内存消耗 :13.9 MB, 在所有 python3 提交中击败了5.53%的用户

代码

    def longestCommonPrefix(self, strs):
        if (strs ==[])or(strs==['']):
            return ''
        s1 = min(strs, key=len)
        for i in range(0, len(s1)):
            for j in strs:
                if j.startswith(s1[:i+1]):
                    continue
                else:
                    return s1[:i]
        return s1

其他

一些思路(复制与LeetCode下回答)
大概有这五种思路, 一般都会采用第四种, 但是耗时太多

1、所求的最长公共前缀子串一定是每个字符串的前缀子串。所以随便选择一个字符串作为标准,把它的前缀串,与其他所有字符串进行判断,看是否是它们所有人的前缀子串。这里的时间性能是O(mnm)。

2、列出所有的字符串的前缀子串,将它们合并后排序,找出其中个数为n且最长的子串。时间性能为O(nm+mnlog(mn))

3、纵向扫描:从下标0开始,判断每一个字符串的下标0,判断是否全部相同。直到遇到不全部相同的下标。时间性能为O(n*m)。

4、横向扫描:前两个字符串找公共子串,将其结果和第三个字符串找公共子串……直到最后一个串。时间性能为O(n*m)。

5、借助trie字典树。将这些字符串存储到trie树中。那么trie树的第一个分叉口之前的单分支树的就是所求。
(https://leetcode-cn.com/problems/implement-trie-prefix-tree/)

s1 = min(strs, key=len) #返回字符串数组中长度最短的字符串

感想

1,试了2种方法,速度有提升,但内存消耗未有提高,已经耗时1小时了。下次再研究吧。
2,待学习新的内容
1,内存消耗的学习(https://blog.csdn.net/jsjwk/article/details/84315770 2019.11.12)
2,上述思路5的学习(trie字典树)(初步思路已了解,不做展开写代码2019.11.12)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值