一、前记(1/3)

本周就结束了本学期的所有考试了,但还是有一堆作业(头疼)。现在进入了暑假,正是考研复习的“黄金期”。所以决定从这一周开始,到暑假结束,每周的算法题目降到3道/周(tcl,才坚持了一个4道/周的算法题目,我是懒(fei)狗(wu))。

二、题目描述

三、解题思路

1、我的解题思路

u1s1,这道题确实把我难道了,题目里面给的范例是列表型的,但是又要把列表里面的每个单词拿出来,对每个单词的前几位进行比较,相似就继续,不相似的就取前几位。(其实说起来容易QAQ,但是实现起来就有点费脑壳)。我的想法就是用第一次学习到的enumerate函数,将列表前面加上索引,然后通过索引来找到列表里面的单词。在单词里面又可以将每个字母进行索引。思路就是这样的。但是还要另外补充一点,我们最好使用选择长度最小的单词作为基准,因为在选择最小公共前缀的时候,最多可以到达单词的最小长度。

示例如下:

#encoding:utf-8
class Solution:
    def longestCommonPrefix(self, strs) -> str:
        if not strs:    #讨论列表(字符串不存在的情况下)
            return ""
        shortstr = min(strs,key=len)    #查找列表里面单词的最小长度
        print("this is strs==\n",strs)
        print("this is shortstr==\n",shortstr)
        for i ,cha in enumerate(shortstr):  #将每个单词挂上索引
            print(i,cha)
            for other in strs:      #选择列表里面的值
                # print("this is other==\n",other)
                if other[i] != cha: #选择单词里面的第i个字母,如果和当前最小字符串长度单词的字母一样,继续向下。如果不一样就选择之前公共前缀
                    print("this is other[i]==\n",other[i])
                    return shortstr[:i]
        return shortstr

#as a checking
a=["fla","floo","flpp"]
solution=Solution()
print(solution.longestCommonPrefix(a))

结果如下图:

2、别人的解题思路

class Solution:
    def longestCommonPrefix(self, strs) -> str:
        res = ""
        if len(strs) == 0:
            return ""
        for each in zip(*strs):  # zip()函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表
            if len(set(each)) == 1:  # 利用集合创建一个无序不重复元素集
                res += each[0]
            else:
                return res
        return res

四、学到了什么?

说实在的 ,在别人的解法里面,确实不太懂zip()函数以及set()函数是坐什么用的,在查阅资料的时候将其弄清楚搞明白了,现在做一个记录。

1、zip()

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。但是直接写入代码print(zip..),出现的结果会是一个对象。因此,我们要通过一些转换来使zip里面的内容能显示出来。例如print(list(zip..)),就会出现列表格式的zip内容。

而*zip(a,b)可以理解成,对之前zip的一种解压,返回的内容为二维矩阵式。

参考示例链接

2、set()

set()的主要意义就是创建一个无序 而又不重复序列,例如:

basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
basket=set(basket)
print(basket)

结果:
{'apple', 'orange', 'banana', 'pear'}
非常明显的去除了几个重复的单词