• 14. 最长公共前缀


    题目:

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

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

    示例 1:

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

    说明:

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

    思路:既然给我的是字符串数组,那我要比较的就不是两个元素了,所以考虑把这些元素的元素都一个一个取出来,放进空字符串里面,然后用字符串的count方法数是不是l个,不是就退出,是就把这个元素存进答案字符串里面,记住每一次循环后,字符串要还原为空字符串。另外,需要做初始准备工作,为了避免越界情况,先找出这些字符串最短的那个,进行这个长度的循环取出。

    class Solution:
        def longestCommonPrefix(self, strs: List[str]) -> str:
            if(strs==[]):
                return ''
            l=len(strs)
            a=''
            ans=' '
            min=len(strs[0])
            for j in range(l):
                ml=len(strs[j])
                if(min>ml):
                    min=ml
            for b in range(min):
                for i in range(l):
                    a+=strs[i][b]
                if(a.count(strs[0][b])!=l):
                    break
                ans+=strs[0][b]
                a=''
            answer=ans.lstrip()
            return answer

    这里为什么用answer去获取呢。。。因为lstrip是返回值而不是更改原字符串。。

    另外两个空字符串不能都命名,所以一个用了带空格的,因为python会指向同一个对象。。

    执行用时 : 56 ms, 在Longest Common Prefix的Python3提交中击败了70.16% 的用户
    内存消耗 : 13.1 MB, 在Longest Common Prefix的Python3提交中击败了78.41% 的用户
     
     
    学习一下别人的方法:
    利用python的max()和min(),在Python里字符串是可以比较的,按照ascII值排,举例abb, aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀
     
        def longestCommonPrefix(self, strs):
            if not strs: return ""
            s1 = min(strs)
            s2 = max(strs)
            for i,x in enumerate(s1):
                if x != s2[i]:
                    return s2[:i]
            return s1

    服气。。。

    这里回忆一下enumerate的用法,i表示下标,x表示字符。

  • 相关阅读:
    java 集合排序
    java传值和传址
    Dom4j操作xml
    JAXP操作xml
    乐观锁和悲观锁【转】
    java IO【转】
    java 可变参数
    Eclipse调试Java的10个技巧【转】
    编译JDK源代码【转】
    Access restriction: The method typeNameToClass(String) from the type ObjectHandler is not accessible due to restriction on required library
  • 原文地址:https://www.cnblogs.com/dmndxld/p/10818808.html
Copyright © 2020-2023  润新知