【问题标题】:Find the longest common prefix string amongst a list of strings在字符串列表中查找最长的公共前缀字符串
【发布时间】:2021-02-14 02:00:14
【问题描述】:

我正在使用 python,我必须编写一个函数来查找字符串列表中最长的公共前缀字符串。
例如,输入参数是["flower", "flow", "flight"], 输出为"fl"。如果输入字符串之间没有公共前缀, 输出是一个空字符串。

【问题讨论】:

    标签: python


    【解决方案1】:

    您可以将字符串压缩在一起zip(*list_o_strings),这将为您提供像('f', 'f', 'f') 这样的元组。如果你将它们传递给一个集合,当所有字母都相同时,该集合将只有一个值。只需在该拉链上循环,直到找到长度大于 1 的集合。

    def common_prefix(l):
        s = ''
        for c, *rest in  map(set, zip(*l)):
            if rest:  # rest will be empty of the set is shorter than 1
                return s
            s += c
        
    common_prefix(["flower", "flow", "flight"])
    # 'fl'
    
    common_prefix(["flower", "flow", "flog"])
    # 'flo'
    
    common_prefix(["glower", "flow", "flight"])
    # ''
    

    【讨论】:

      【解决方案2】:
      def get_prefix_str(str_list):
          # take first string as reference and compare each char with the corresponding char of the rest of strings
          prefix_str = ''
          len_smallest_str = min([len(str_mem) for str_mem in str_list])
          for i in range(len_smallest_str): 
              if len([0 for ind in range(1, len(str_list)) if str_list[0][i] != str_list[ind][i]]) > 0:
                  break 
              prefix_str += str_list[0][i]
          return prefix_str
      
      for str_list in [["flower", "flow", "flight"], ["lower", "low", "light"], ["ower", "ow", "ight"]]:
          print(str_list)
          prefix_str = get_prefix_str(str_list)
          print(f'Prefix is {prefix_str}')
      

      输出:

      ['flower', 'flow', 'flight']
      Prefix is fl
      ['lower', 'low', 'light']
      Prefix is l
      ['ower', 'ow', 'ight']
      Prefix is
      

      【讨论】:

      • 马克的解决方案是真正的pythonic解决方案
      猜你喜欢
      • 2018-05-07
      • 1970-01-01
      • 2012-01-24
      • 2017-08-03
      • 2020-11-13
      • 2012-02-25
      • 2011-10-21
      • 2022-01-09
      • 1970-01-01
      相关资源
      最近更新 更多