014. 最长公共前缀
鲁迅曾说,每天刷一道二哥的 LeetCode 笔记,不但身体健康,而且精神抖擞。
题意
编写一个方法来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""
。
难度
简单
示例
输入:strs = ["flower","flow","flight"]
输出:"fl"
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
分析
这道题最重要的是,搞清楚什么是公共前缀。公共前缀就是字符串数组中,所有字符串都包含的前缀。例如,字符串数组 ["flower","flow","flight"]
的最长公共前缀就是 fl
。
一个很容易想到的办法,我们将数组中的第一个字符串作为初始的最长公共前缀,然后逐个将它与数组中的其他字符串进行比较。在比较的过程中,我们逐步缩短这个公共前缀,直到它同时是所有字符串的前缀。
①、初始前缀:假设整个数组的最长公共前缀就是数组中的第一个字符串,即 prefix = strs[0]
。
②、遍历字符串数组:遍历字符串数组中的每一个字符串。对于每个字符串 strs[i]
,我们检查它是否包含当前的最长公共前缀 prefix
。(可以跳过第一个,因为第一个就是它自己)
③、更新前缀:
- 如果当前字符串
strs[i]
包含前缀prefix
,我们就继续下一个字符串的比较。 - 如果当前字符串
strs[i]
不包含前缀prefix
,我们就缩短前缀的长度,即prefix = prefix.substring(0, prefix.length() - 1)
,然后再次检查。 - 重复这个过程,直到
strs[i]
包含了prefix
或prefix
变成空字符串(即没有公共前缀)。
④、返回结果:最终 prefix
就是数组中所有字符串的最长公共前缀。
我们来看题解:
真诚点赞 诚不我欺
回复