zoukankan      html  css  js  c++  java
  • 20190501-编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串

    题目描述

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

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

    示例 1:

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

    输出: "fl"

    示例 2:

    输入: ["dog","racecar","car"]

    输出: ""

    解释: 输入不存在公共前缀。

    考点

    1. 根据列表中的字符串长度排序
    2. 两层for循环的使用,for|else的使用

    算法1

    从下标0开始,判断每一个字符串同一索引所对应的值,判断是否全部相同。直到遇到不全部相同的时候return。

    由于提供的单词长度不同,应该以最小单词为基准进行比较,如["flower","flow","flight"]中应该以flow来和剩下的单词一一对比。

    1. 所有单词同一索引所对应的值相等,则更新最长公共前缀
    2. 有一个单词与其他单词同一索引所对应的值不相等,则返回最后更新的最长公共前缀

    代码1

    def longestCommonPrefix(strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        strs.sort(key =len)# 根据列表中的字符串长度排序
        if not strs:
            return ''
        result = ''#记录公共前缀
        for i in range(len(strs[0])):#以列表中长度最小的单词为基准进行遍历
            for j in strs:#遍历列表中的每个字符串
                if j[i] != strs[0][i]:#如果列表中的字符串的对应下标是否相同
                    return result
            else:
                result += strs[0][i]#如果所有字符串下标都相同,更新最长公共前缀
        return result
    print(longestCommonPrefix([""]))

    算法2

    利用python的max()和min(),在Python里字符串是可以比较的,按照ascII值排,举例abb,aba,abac,最大为abb,最小为aba。所以只需要比较最大最小的公共前缀就是整个数组的公共前缀

    代码2

        def longestCommonPrefix(self, strs):
            """
            :type strs: List[str]
            :rtype: str
            """
            s1 = min(strs)
            s2 = max(strs)
            for i,x in enumerate(s1):
                if x != s2[i]:
                    return s2[:i]
            return s1
  • 相关阅读:
    扩充Visual Studio 功能
    如何分层啊?
    DirectXInput
    关于分享
    消息机制
    C# 开启一个新进程,IE,打开一个URL,第一次总失败,刷新一下就好了
    远程调试IIS服务器的ASP.NET2.0网站
    IIS 用户 NT AUTHORITY\NETWORK SERVICE 登录失败解决方法
    SharePoint 2010微软Technet讲座第一讲笔记(2011年3月9日发布)
    IIS 未能加载文件或程序集 system.web.extensions解决方法
  • 原文地址:https://www.cnblogs.com/hyj691001/p/10799710.html
Copyright © 2011-2022 走看看