标签:位置 变量 image return rac common ace longest rgba
描述:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。例如输入:strs = ["flower","flow","flight"],输出:"fl"。输入:strs =["dog","racecar","car",输出:""。
思路一:横向扫描,从第一个开始,把第一个逐个和后面的进行比较,得到最长公共前缀。
时间复杂度:O(m*n)其中 m是字符串数组中的字符串的平均长度,n 是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。
空间复杂度:O(1)常数个空间变量
//方法一横向扫描
public String longestCommonPrefix(String[] strs){
if(strs.length == 0 || strs == null){
return "";
}
String prefix = strs[0];
for(int i = 1;i<strs.length;i++){
prefix = longestCommonPrefix(prefix,strs[i]);
if(prefix.length() == 0){
return "";
}
}
return prefix;
}
private String longestCommonPrefix(String str1, String str2) { //两个字符串的最长公共前缀
int length = Math.min(str1.length(),str2.length());
int index = 0;
while(index<length && str1.charAt(index) == str2.charAt(index)){
index++;
}
return str1.substring(0,index); //取到第零个位置到第i个位置的字符串,即最长公共前缀。
}
思路二:纵向扫描,即从前往后遍历所有字符串的每一列,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀。
时间复杂度:O(m*n)其中 m是字符串数组中的字符串的平均长度,n 是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。
空间复杂度:O(1)常数个空间变量
//方法二纵向扫描
public String longestCommonPrefix2(String[] strs){
if(strs == null || strs.length == 0){
return "";
}
String prefix = "";
int length = strs[0].length();
int count = strs.length;
for(int i = 0;i<length;i++){ //表示第一个字符串的第i位
char c = strs[0].charAt(i);
for(int j = 1;j<count;j++){ //从第二个字符串开始纵向比较
if(i == strs[j].length() || strs[j].charAt(i) != c){
return strs[0].substring(0,i);
} //i == strs[i].length()用于判断后面的字符串的长度是否小于第一个,这样就可以提前结束
} //strs[j].charAt(i) != c不相等,直接结束。
}
return strs[0];
}
2021-05-27
标签:位置 变量 image return rac common ace longest rgba
原文地址:https://www.cnblogs.com/liuhuaabcp/p/14817403.html