14. 【简单】最长公共前缀
链接
题目描述
1.水平扫描法(利用indexOfs)
思路
就是把第一个String 先作为初始的公共前缀,然后不断缩小的过程
时间复杂度:
,S是所有字符串数量的总和
空间复杂度:
代码
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs == null || strs.length == 0){
return "";
}
String prefix = strs[0];
for(int i = 1; i < strs.length ;i++){
while(strs[i].indexOf(prefix) != 0){
prefix = prefix.substring(0,prefix.length()-1);
if(prefix.length() == 0){
return "";
}
}
}
return prefix;
}
}
2.水平扫描(每一列)
思路
我们从前往后枚举字符串的每一列,先比较每个字符串相同列上的字符(即不同字符串相同下标的字符)然后再进行对下一列的比较。
时间复杂度:
空间复杂度:
代码
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs == null || strs.length == 0){
return "";
}
for(int i = 0; i < strs[0].length();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];
}
}