14. longest common prefix

Question

Write a function to find the longest common prefix string amongst an array of strings.

input

string[]

output

string

Solution

因为是公共子串,显然有

1
所有字符串的最长公共前缀是任意两个字符串的最长公共前缀的子串

因此我们先将第一个字符串设为最长公共前缀S,再将S与下一个字符串进行比较。

code

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
//手动匹配前缀
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0) return "";
String prefix = strs[0];
int minlength,j;
for(int i = 1 ; i < strs.length ; i++){
String str = strs[i];
minlength = prefix.length() > str.length() ? str.length() : prefix.length();
for(j = 0 ; j < minlength ; j++){
if(prefix.charAt(j) != str.charAt(j)){
break;
}
}
if(j==0) {
prefix = "";
break;
}
prefix = prefix.substring(0,j);
}
return prefix;
}
//直接使用java函数
public String longestCommonPrefix(String[] strs) {
if(strs == null || strs.length == 0) return "";
String prefix = strs[0];
if(strs.length == 1) return prefix;
for(int i=1; i<strs.length; i++) {
while(strs[i].indexOf(prefix)!=0) {
prefix = prefix.substring(0,prefix.length()-1);
}
}
return prefix;
}