pallas 发表于 2021-10-22 12:45:02

求助大佬,最长公共前缀

在网上搜了,但是运行不了,而且看不懂{:10_266:}
大佬如果有其他方法麻烦标一下注释,谢谢!!
class Solution:
    def longestCommonPrefix(self, strs: List) -> str:
      def preFix(str1, str2):
            l = str1 if len(str1) <= len(str2) else str2
            for i in range(len(l)):
                if str1 != str2 and i == 0:
                  return ''

                if str1 != str2:
                  return l[:i]
                if str1 == str2 and i == len(l) - 1:
                  return l
               

      if strs == [] or '' in strs:
            return ''

      if len(strs) == 1 and '' not in strs:
            return strs

      res = []
      longPreFix = strs
      res.append(longPreFix)
      for s in strs:
            p = preFix(longPreFix, s)
            if p == '':
                res.pop()
                res.append('')
                return res
            elif len(p) < len(res):
                res.pop()
                res.append(p)

      return res


梦回连营 发表于 2021-10-22 12:45:03

class Solution:
    def longestCommonPrefix(self, strs: list) -> str:
      start = 1
      stillmatch = True
      while start <= len(strs):

            #将字符串数组第一个字符串之后的字符串分别与第一个字符比较
            for j in range(1, len(strs)):
                if strs[:start] != strs[:start]:
                  stillmatch = False
                  break

            #一旦发现不匹配则可以退出循环
            if not stillmatch:
                break

            #更新比较的字符串前缀的位置
            start += 1

      return strs[:start-1]

傻眼貓咪 发表于 2021-10-22 13:31:45

本帖最后由 傻眼貓咪 于 2021-10-22 13:59 编辑

这是我之前在力扣的题解,希望对你有帮助

pallas 发表于 2021-10-23 14:11:24

梦回连营 发表于 2021-10-22 13:47


class Solution:
            def longestCommonPrefix(self, strs: list) -> str:
                start = 1
                stillmatch = True
                while start <= len(strs):

                  # 将字符串数组第一个字符串之后的字符串分别与第一个字符比较
                  for j in range(1, len(strs)):
                        if strs[:start] != strs[:start]:
                            stillmatch = False
                            break

                  # 一旦发现不匹配则可以退出循环
                  if not stillmatch:
                        break

                  # 更新比较的字符串前缀的位置
                  start += 1

                return strs[:start - 1]


      num = eval(input("请输入一串字符串:"))
      nums = num.longestCommonPrefix(num)
      print(nums)
报错:
Traceback (most recent call last):
File "C:\Users\mate\AppData\Roaming\JetBrains\PyCharmCE2021.2\scratches\second.py", line 43, in <module>
    class Solution:
File "C:\Users\mate\AppData\Roaming\JetBrains\PyCharmCE2021.2\scratches\second.py", line 44, in Solution
    def longestCommonPrefix(self, strs: list) -> str:
TypeError: 'type' object is not subscriptable

梦回连营 发表于 2021-10-23 19:29:27

本帖最后由 梦回连营 于 2021-10-23 19:35 编辑

pallas 发表于 2021-10-23 14:11
class Solution:
            def longestCommonPrefix(self, strs: list) -> str:
             ...

你类都没有实例化怎么运行啊。先把对象实例化啊,这你都还不会急着去学什么算法啊
a = Solution()
a.函数()
还有eval函数是这么用的吗?它是把所有字符串当代码,你随便输入一个字符串当成变量赋值能运行吗?
人家要求你输入的是一个列表, 列表里的是字符串,你题目都没看明白
一步一步来吧,兄弟

pallas 发表于 2021-10-24 12:19:14

梦回连营 发表于 2021-10-23 19:29
你类都没有实例化怎么运行啊。先把对象实例化啊,这你都还不会急着去学什么算法啊
a = Solution()
a. ...

大佬,关于代码我有几个问题:
1.stillmatch的作用是什么?还有True和Flase
2.最后return strs[:start -1],为什么要减1呢?

pallas 发表于 2021-10-24 13:14:50

傻眼貓咪 发表于 2021-10-22 13:31
这是我之前在力扣的题解,希望对你有帮助

大佬,他没有返回值啊
请输入一个串字符串:'asd''asdx''asdw'
它返回空

qq1151985918 发表于 2021-10-24 15:13:58

本帖最后由 qq1151985918 于 2021-10-24 15:23 编辑

class Solution:
    def longestCommonPrefix(self, strs: List) -> str:
      for i in range(len(strs), 0, -1):
            for j in strs:
                if strs[:i] != j[:i]:
                  break
            else:
                return strs[:i]
      else:
            return ""

pallas 发表于 2021-10-24 18:12:11

qq1151985918 发表于 2021-10-24 15:13


大佬,能写一下注释吗?{:10_254:}
页: [1]
查看完整版本: 求助大佬,最长公共前缀