当前位置:   article > 正文

LeetCode #14. 最长公共前缀

最长公共前缀

力扣 | # 14.最长公共前缀

方法一:横向扫描比较

思路:先将第一个字符串作为最长公共前缀,然后逐个和后面的字符串比较,记录新的最长公共前缀,直到全部遍历完成可得全部字符串的最长公共前缀。

LCP(S1...Sn)=LCP(LCP(LCP(S1,S2),S3),...Sn)

先写比较函数LCP

取两个字符串中较小的并测量其长度。

利用循环比较两者中每一个元素的值,相等则指针index往后增加,一旦发现不相等则立刻跳出,最后返回前面相同的部分即为公共前缀。

  1. def LCP(self, str_1, str_2):
  2. n = len(min(str_1, str_2))
  3. index = 0
  4. for i in range(0, n):
  5. if str_1[i] == str_2[i]:
  6. index += 1
  7. else:
  8. break
  9. return str_1[:index]

然后是主函数longestCommonPrefix,先假定第一个字符串最为最长公共前缀,然后利用LCP函数和后面的字符串比较。将结果返回。

如果发现比较结果为空则立即跳出循环,不必再比较后面的字符串了,因为已经没有公共部分了。

  1. if not max_com_prefix:
  2. break

全部代码如下

  1. from typing import List
  2. class Solution:
  3. def longestCommonPrefix(self, strs: List[str]) -> str:
  4. if not strs:
  5. return ""
  6. count = len(strs)
  7. max_com_prefix = strs[0]
  8. for i in range(1, count):
  9. max_com_prefix = self.LCP(max_com_prefix, strs[i])
  10. if not max_com_prefix:
  11. break
  12. return max_com_prefix
  13. def LCP(self, str_1, str_2):
  14. n = len(min(str_1, str_2))
  15. index = 0
  16. for i in range(0, n):
  17. if str_1[i] == str_2[i]:
  18. index += 1
  19. else:
  20. break
  21. return str_1[:index]
  22. if __name__ == "__main__":
  23. a = Solution()
  24. str_test01 = ["flower","flow","flight"]
  25. print(a.longestCo
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/446070
推荐阅读
相关标签
  

闽ICP备14008679号