zoukankan      html  css  js  c++  java
  • 3.最长公共前缀

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

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

    示例 1:

    输入:strs = ["flower","flow","flight"]
    输出:"fl"
    示例 2:

    输入:strs = ["dog","racecar","car"]
    输出:""
    解释:输入不存在公共前缀。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-common-prefix
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路:

    这题自己采用的笨方法,浪费了不少时间。

    主要是好多异常场景没有考虑全,导致有些特殊场景会执行失败。。。

    比如:列表中存在空字符串、列表长度为1,列表中的字符串长度不一致等等

    这里采用了一个flag作为跳出while循环的标识。

    循环内的情况为:

    第11行单独处理长度为1的列表;

    第13行读取列表中第i个字符串的每个字符;

    第14行要求列表中第i个字符串和第i+1个字符串长度都要大于比较序号,否则就会出现out of range的错误;

    第15行判断上面两个字符串中的前n个字符是否相等,相等就继续比较,不相等就跳出循环;

    最后返回任意一个字符串中的前n个字符。OK

     1 class Solution(object):
     2     def longestCommonPrefix(self, strs):
     3         """
     4         :type strs: List[str]
     5         :rtype: str
     6         """
     7         strs_len = len(strs)
     8         n = 0
     9         flag = 1
    10         while flag:
    11             if strs_len == 1:                               #当列表长度为1时,需单独处理
    12                 return strs[0]
    13             for i in range(strs_len-1):
    14                 if len(strs[i]) >n and len(strs[i+1]) >n:   #当前和下一个字符串长度都要大于比较序号
    15                     if strs[i][n] == strs[i+1][n]:
    16                         continue
    17                     else:
    18                         flag = 0
    19                 else:
    20                     flag = 0
    21             n += 1
    22         return strs[0][0:n-1]
    最懒的人就是整天忙得没时间学习、反思、成长的人。
  • 相关阅读:
    [网络流24题(1/24)] 最小路径覆盖问题(洛谷P2764)
    Codeforces 1082 G(最大权闭合子图)
    bzoj 1497(最大权闭合图/最小割)
    loj 515(bitset优化dp)
    bzoj 3998 (后缀自动机)
    HDU 6071(同余最短路)
    SPOJ COT2 (树上莫队)
    Atcoder Grand Contest 20 C(bitset优化背包)
    hdu 6480-6489 (2018 黑龙江省大学生程序设计竞赛)
    POJ 2594 Treasure Exploration(可重点最小路径覆盖)
  • 原文地址:https://www.cnblogs.com/jockeyhao/p/15789162.html
Copyright © 2011-2022 走看看