归子莫的博客

「笔杆揭不起,绘不出青烟别春泥 ————归子莫」

LeetCode–最长公共前缀

博客说明

文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!

说明

leetcode题,14题

最长公共前缀

题目

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 “”。

示例 1:

1
2
输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

1
2
输入: ["dog","racecar","car"]
输出: ""

解释: 输入不存在公共前缀。

说明:

1
所有输入只包含小写字母 a-z

Java

水平扫描法

依次遍历字符串数组中的每个字符串,对于每个遍历到的字符串,更新最长公共前缀,当遍历完所有的字符串以后,即可得到字符串数组中的最长公共前缀。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs == null || strs.length == 0){
return "";
}
//假设第一个字段为公共前缀
String prefix = strs[0];
int count = strs.length;
for(int i = 1;i<count;i++){
//获取两个字符串最长前缀
prefix = longestCommonPrefix(prefix,strs[i]);
if(prefix.length() == 0){
break;
}
}
return prefix;
}

//获取两个字符串最长前缀
public String longestCommonPrefix(String str1,String str2){
int length = Math.min(str1.length(),str2.length());
int index = 0;
while(index<length && str1.charAt(index) == str2.charAt(index)){
index++;
}
return str1.substring(0,index);
}
}

Python

水平扫描法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ""
#假设第一个字段为公共前缀
prefix , count = strs[0],len(strs)
for i in range(1,count):
#获取两个字符串最长前缀
prefix = self.commonPrefix(prefix,strs[i])
if not prefix:
return ""
return prefix
#获取两个字符串最长前缀
def commonPrefix(self,str1,str2):
length,index = min(len(str1),len(str2)),0
while index < length and str1[index] == str2[index]:
index += 1
return str1[:index]

C++

水平扫描法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(!strs.size()){
return "";
}

string prefix = strs[0];
int count = strs.size();
for (int i = 1;i < count; i++){
prefix = longestCommonPrefix(prefix,strs[i]);
if (!prefix.size()){
break;
}
}
return prefix;
}

string longestCommonPrefix(const string& str1,const string& str2){
int index = 0;
int length = min(str1.size(),str2.size());
while(index < length && str1[index] == str2[index]){
index++;
}
return str1.substr(0,index);
}
};

PHP

水平扫描法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Solution {

/**
* @param String[] $strs
* @return String
*/
function longestCommonPrefix($strs) {
$prefix = '';
$i = 0;
//判断其中是否有字符串长度为0
foreach($strs as $key => $value){
if($value == ''){
return $prefix;
}
}
//判断个数是否为空
if(count($strs)<1){
return $prefix;
}

while(true){
//获取当前第i个字符
$current = $strs[0]{$i};
if(!$current){
return $prefix;
}
foreach($strs as $key => $value){
if($value{$i} != $current){
return $prefix;
}
}
$prefix .= $current;
$i++;
}
return $prefix;
}
}

感谢

leetcode

以及勤劳的自己

评论