14. 最长公共前缀
题目链接
横向扫描
- 先比较前两个字符串的最长公共前缀,所得结果再与下一个字符串比较
- 通过递归的方式,将多个字符串比较转换为两两比较
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0){
return "";
}
String ans = strs[0];
for(int i = 1; i < strs.length; i++)
ans = longestCommonPrefix(ans, strs[i]);
return ans;
}
public String longestCommonPrefix(String str1, String str2){
int len = Math.min(str1.length(), str2.length());
StringBuilder ans = new StringBuilder();
for(int i = 0; i< len; i++){
if(str1.charAt(i) == str2.charAt(i))
ans.append(str1.charAt(i));
else return ans.toString();
}
return ans.toString();
}
}
- 时间复杂度O(mn),m是字符串数组中的字符串的平均长度,n是字符串的数量
- 空间复杂度为O(1)
纵向扫描
- 遍历字符串的每一位,比较所有字符串的这一位是否相同
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0){
return "";
}
int len = strs[0].length();
for(int i = 0; i < len; i++){
char c = strs[0].charAt(i);
for(int j = 1; j < strs.length; j++){
if(i == strs[j].length() || strs[j].charAt(i) != c)
return strs[0].substring(0, i);
}
}
return strs[0];
}
}
- 时间复杂度O(mn),m是字符串数组中的字符串的平均长度,n是字符串的数量
- 空间复杂度为O(1)