鱼C论坛

 找回密码
 立即注册
查看: 1535|回复: 8

[已解决]求助大佬,最长公共前缀

[复制链接]
发表于 2021-10-22 12:45:02 | 显示全部楼层 |阅读模式
20鱼币
在网上搜了,但是运行不了,而且看不懂
大佬如果有其他方法麻烦标一下注释,谢谢!!
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        def preFix(str1, str2):
            l = str1 if len(str1) <= len(str2) else str2
            for i in range(len(l)):
                if str1[i] != str2[i] and i == 0:
                    return ''

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

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

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

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

        return res[0]


最佳答案
2021-10-22 12:45:03
  1. class Solution:
  2.     def longestCommonPrefix(self, strs: list[str]) -> str:
  3.         start = 1
  4.         stillmatch = True
  5.         while start <= len(strs[0]):

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

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

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

  16.         return strs[0][:start-1]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-22 12:45:03 | 显示全部楼层    本楼为最佳答案   
  1. class Solution:
  2.     def longestCommonPrefix(self, strs: list[str]) -> str:
  3.         start = 1
  4.         stillmatch = True
  5.         while start <= len(strs[0]):

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

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

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

  16.         return strs[0][:start-1]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-22 13:31:45 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-10-22 13:59 编辑

这是我之前在力扣的题解,希望对你有帮助
題解.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-23 14:11:24 | 显示全部楼层

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

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

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

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

                return strs[0][: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]) -> str:
TypeError: 'type' object is not subscriptable
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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]) -> str:
             ...


你类都没有实例化怎么运行啊。先把对象实例化啊,这你都还不会急着去学什么算法啊
a = Solution()
a.函数()
还有eval函数是这么用的吗?它是把所有字符串当代码,你随便输入一个字符串当成变量赋值能运行吗?
人家要求你输入的是一个列表, 列表里的是字符串,你题目都没看明白
一步一步来吧,兄弟
Quicker_20211023_193516.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

大佬,关于代码我有几个问题:
1.stillmatch的作用是什么?还有True和Flase
2.最后return strs[0][:start -1],为什么要减1呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-24 13:14:50 | 显示全部楼层
傻眼貓咪 发表于 2021-10-22 13:31
这是我之前在力扣的题解,希望对你有帮助

大佬,他没有返回值啊
请输入一个串字符串:'asd''asdx''asdw'
它返回空
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-24 15:13:58 | 显示全部楼层
本帖最后由 qq1151985918 于 2021-10-24 15:23 编辑
  1. class Solution:
  2.     def longestCommonPrefix(self, strs: List[str]) -> str:
  3.         for i in range(len(strs[0]), 0, -1):
  4.             for j in strs[1:]:
  5.                 if strs[0][:i] != j[:i]:
  6.                     break
  7.             else:
  8.                 return strs[0][:i]
  9.         else:
  10.             return ""
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-10-24 18:12:11 | 显示全部楼层

大佬,能写一下注释吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 13:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表