原题链接 : 最长公共前缀
首先审题, 从题目名可以得知, 需要我们给出最长的, 公共的前缀. 这里要注意区分前缀和子串(别问我为啥提示)…
既然是前缀, 就比较简单了, 一般有两个思路 :
-
横向比较
拿首个字符串和第二个字符串做比较, 得到公共的前缀, 如果没有就不用再比了, 直接返回"" ; 如果有, 则拿得到的最长前缀和下一个字符串比较, 有则继续, 无则直接返回, 以此类推; -
纵向比较
拿首个字符串的字符依次和后面所有的字符串的相应位置字符比较, 都有则继续比较下一个, 有一个无则直接返回 ;这两个比较方式都还OK, 但个人更喜欢第二种, 我认为它比第一种更高效. 代码如下
public String longestCommonPrefix(String[] strs) {
// 题目很简单易懂, 首先还是先处理特殊情况
if (strs == null || strs.length == 0 ) {
return "" ;
}
// 首层for循环控制当前是第几个字符
for (int i = 0 ; i < strs[0].length() ; i++ ){
char c = strs[0].charAt(i);
// 里层for循环控制和第几个字符串做比较
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];
}```