leetcode_014_Longest_Common_Prefix

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

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

示例 1:

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

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

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

解题思路:

暴力法:

  • 取出strs中第一个元素的第i个值和第j个元素的第i个值进行比较,相同则添加到sb中
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class Solution {
    public String longestCommonPrefix(String[] strs) {
    if(strs.length == 0) return "";
    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();
    }
    }

之后做了小改动,显得更简洁一些,用了substring()方法,但思路类似:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public static String longestCommonPrefix(String[] strs) {
int count = strs.length;
String prefix = "";
if(count != 0){
prefix = strs[0];
}
for(int i=1; i<count; i++){
//关键代码,不断的从后往前截取字符串,然后与之相比,直到startsWith()返回true
while(!strs[i].startsWith(prefix)){
prefix = prefix.substring(0, prefix.length()-1);
}
}
return prefix;
}
}

采用方法 分别用时
1 9ms
2 13ms