Write a function to find the longest common prefix string amongst an array of strings.
写一个函数找到一个字符串数组中所有字符串最长的公共前缀
想法:先通过获取所有字符串中最短的长度len,因为公共前缀长度肯定超不过最短的字符串的长度,简化运算步骤。
然后暴力计算,每个字符串的第一位比较,一旦字符串数组中有两个字符串前缀不一样则返回前一次的结果,一直比较到第len个字符。
代码:
public class Solution {
private int minlen(String[] strs) {
int min = Integer.MAX_VALUE;
for(int i=0; i<strs.length;i++)
min = Math.min(min,strs[i].length());
return min;
}
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0)
return "";
StringBuilder res = new StringBuilder();
int index = 0;
int len = minlen(strs);
while (index < len){
for (int i=1; i<strs.length;i++){
if (strs[i].charAt(index) != strs[0].charAt(index))
return res.toString();
}
res.append(strs[0].charAt(index));
index++;
}
return res.toString();
}
}
更强的做法(空间复杂度更小):
public class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0||strs == null)
return "";
for(int i = 0; i<strs[0].length(); i++){
char x = strs[0].charAt(i);
for(int j = 1; j<strs.length; j++){
if(strs[j].length() == i || strs[j].charAt(i) != x)
return strs[0].substring(0,i);
}
}
return strs[0];
}
}