编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public String longestCommonPrefix(String[] strs) {
String s = "";
//如果数组为空则返回""
if(strs == null || strs.length == 0 ){
return s;
}
//如果数组只有一个字符串 则返回该字符串
if(strs.length == 1){
return strs[0];
}
//循环纵向比较字符串的字符
for(int i = 0; i < strs[0].length(); i++){
char a = strs[0].charAt(i);
for(int j = 0;j < strs.length; j++){
if(i < strs[j].length() && a == strs[j].charAt(i) ){
//如果所有的字符串包含该字符,则将该字符添加到字符串s中
if(j == strs.length-1){
s= s + String.valueOf(a);
}
continue;
}else{
//如果某个字符串不包含该字符 直接返回
return s;
}
}
}
return s;
}
}
我的思路是纵向比较,即将每个字符串的第一个字符拿出来比较,如果所有字符串都含有该字符,则说明它为公共字符串的一部分,以此类推。
学习评论的做法!令人惊叹!
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length==0)return "";
//公共前缀比所有字符串都短,随便选一个先
String s=strs[0];
for (String string : strs) {
while(!string.startsWith(s)){
if(s.length()==0)return "";
//公共前缀不匹配就让它变短!
s=s.substring(0,s.length()-1);
}
}
return s;
}
}
startWith()!!! 自己与大神的思维模式还是差得太多,这样做得时间跟空间复杂度都小得多!