LeetCode Note Java 00014:Longest Common Prefix

回傳最長的共同字首。

題目

Longest Common Prefix Easy

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

If there is no common prefix, return an empty string “”.

我的解法

想法

  1. 計數器記錄幾個字都相同。

  2. 最後取出計算數量的的字做成字串回傳。

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
class Solution {
public String longestCommonPrefix(String[] strs) {
int minLength = strs[0].length();
for (String str : strs) {
if (str.length() < minLength) {
minLength = str.length();
}
}
if (minLength == 0) {
return "";
}
boolean same = true;
int count = 0;
while (same && count < minLength) {
char c = strs[0].charAt(count);
for (String str : strs) {
if (str.charAt(count) != c) {
same = false;
}
}
if (same) {
count++;
}
}
if (count == 0) {
return "";
}
char[] ca = new char[count];
for (int i = 0; i < count; i++) {
ca[i] = strs[0].charAt(i);
}
return new String(ca);
}
}

注意

  • String 長度會不同,要避免發生 StringIndexOutOfBoundsException。

檢討

我的方法算是從頭開始一個一個加,看到別人有用減法的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs == null || strs.length == 0) return "";
String pre = strs[0];
int i = 1;
while(i < strs.length){
while(strs[i].indexOf(pre) != 0)
pre = pre.substring(0, pre.length() - 1);
i++;
}
return pre;
}
}

重點物件或方法

  • String.indexOf()

  • String.substring()

參考資料

從LeetCode學演算法 - 2