LeetCode | 5. Longest Common Prefix 最长公共前缀
Longest Common Prefix 是 LeetCode 算法题库中的第十四道题,难度为 Easy,题目地址为:https://leetcode.com/problems/longest-common-prefix/
1. 问题描述
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,则返回空字符串""
。(所有输入都只包含小写字母a-z
。
示例:
2. 解题思路
看到该题,我首先想到的是分别取每个字符串的相同位置的字符进行一一比较,这其实是纵向扫描方法。
该题官方是给出了4种解题思路,分别是:
纵向扫描:从前往后遍历所有字符串的每一列,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀。
横向扫描:依次遍历每个字符串,对于每个字符串,更新最长公共前缀,当遍历完所有字符串以后,就可以得到最长公共前缀了。该方法是基于这样的基础:
分治:类似于横向扫描方法,将字符串数组分为拆成两个子部分来计算最长公共前缀。
二分查找:通过找到字符串数组中的最短数组,以这个字符串的长度为基础取得中间值
mid
,判断每个字符串的长度为mid
的前缀是否相同。
3. 知识点
这里的知识点包括两个算法概念,以后再来做更为详细的学习:
分治
二分查找
对 C# 的语言,来求取字符串的切片时,可以通过 String.Substring方法。
4. 代码
Python 实现
纵向扫描
横向扫描
分治
C# 实现
纵向扫描
横向扫描
版权声明: 本文为 InfoQ 作者【Puran】的原创文章。
原文链接:【http://xie.infoq.cn/article/cac89de3ce63410758fb1401a】。文章转载请联系作者。
评论