leetcode-14. Longest Common Prefix
阿新 • • 發佈:2018-11-21
題目型別:
字串
題意:
Write a function to find the longest common prefix string amongst an array of strings.
找出一個字串陣列中所有字串的最長共同==字首==。
字串API:
==indexOf()的用法==:返回字元中indexof(string)中字串string在父串中首次出現的位置,沒有返回-1;
==lastIndexOf()的用法:==返回字串中target的最後一次出現位置
我的思路:依次對比
效率:11%
- 初始化公共字首sub為第一個字串str[0]
- 如果有超過一個字串,迴圈對比sub和之後的每一個字串,取公共部分為sub
class Solution {
public String longestCommonPrefix(String[] strs) {
int len = strs.length;
if (len == 0) return "";
String prefix = strs[0];
if (len == 1) return prefix;
for(int i = 1; i < len; i++){
String cur = strs[i];
int prefixLen = prefix.length();
int curLen = cur.length();
boolean changed = false;
for (int j = 0; j < Math.min(prefixLen, curLen); j++) {
if (prefix.charAt(j) != cur.charAt(j)) {
prefix = prefix.substring(0 , j);
changed = true;
break;
}
}
prefix = (!changed &&curLen < prefixLen) ? cur : prefix;
}
return prefix;
}
}
方法二:indexOf
效率:80%
- 初始化prefix為strs[0]
- 迴圈遍歷strs的每一個字串str,如果str.indexOf(prefix) == 0,證明公共字首不變,仍未為prefix;如果不為0,那麼可能未找到(prefix = abcd, str = abc),也可能在後面(prefix = abc, str = dabc),那麼將==prefix截去最後一個字元==,再到該str中查詢,直至找到位置為0或者不存在prefix(”“)
class Solution {
//方法二:indexOf
public String longestCommonPrefix(String[] strs) {
int len = strs.length;
if (len == 0) return "";
String prefix = strs[0];
if (len == 1) return prefix;
for (String str : strs) {
while (str.indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length() - 1);
}
}
return prefix;
}
}