leetcode14最长公共前缀

描述

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

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

示例 1:

输入: [“flower”,”flow”,”flight”]
输出: “fl”

示例 2:

输入: [“dog”,”racecar”,”car”]
输出: “”
解释: 输入不存在公共前缀。

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
class Solution {
public String longestCommonPrefix(String[] strs) {
//if(strs==null) return null;
int N=strs.length;
int maxlen=0;
int maxflag=0;
for(int i = 0; i<N;i++)
{
if(strs[i].length()>maxlen)
{
maxlen=strs[i].length();
maxflag=i;
}

}
List<Character> list=new ArrayList<>();
for(int i = 0;i<maxlen;i++)
{
list.add(strs[maxflag].charAt(i));
}

int num=0; //第num个元素
int min =maxlen; //子字符串截取尾指针
for(int i =0;i<strs.length;i++)
{
String str = strs[i];
int n = str.length();
if(n==0) return "";

for(int j=0;j<n;j++)
{
if(str.charAt(j)==list.get(j))
{
if(j==n-1 && n< min)
{
min = n;
num=i;
}
}else {
if(j>0 && j<min)
{
min = j;
num=i;
break;
}else if(j == 0) return "";
}
}
}
//System.out.println(num);
//System.out.println(min);
if(strs.length==0) return "";
else{
String string = strs[num];
//return string.substring(0,min);
return string.length()==0?"":string.substring(0,min);
}

}
}

方法二:
暴力法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs.length == 1){
return strs[0];
}
StringBuilder sb = new StringBuilder();
if (strs.length>1) {
int len = strs[0].length();
for (int i = 0; i < len; i++) {
char curr = strs[0].charAt(i);
for (int j = 1; j < strs.length; j++) {
if (strs[j].length()<=i ||strs[j].charAt(i) != curr) {
return sb.toString();
}
if (strs[j].charAt(i) == curr && j == strs.length - 1) {
sb.append(curr);
}
}
}
}
return sb.toString();
}
}