14. Longest Common Prefix
题目
写一个函数来找到字符串数组中的最长公共前缀字符串。
如果没有公共前缀,返回一个空字符串 “”。
例1:
Input: [“flower”,”flow”,”flight”]
Output: “fl”
例2:
Input: [“dog”,”racecar”,”car”]
Output: “”
解释:在输入字符串数组中,没有公共前缀。
注:所有给出的输入都是小写字母a-z.
代码块
class Solution {
public static String longestCommonPrefix(String[] strs) {
if (strs.length == 0)
return "";
if (strs.length == 1)
return strs[0];
String strMin = strs[0];
for(int i = 0; i < strs.length; i++){
strMin = (strs[i].length() >= strMin.length())? strMin : strs[i];
}
for(int i = 0; i < strMin.length() ; i++){
for(int j = 0; j < strs.length; j++){
if(strs[j].charAt(i) != strMin.charAt(i)){
return strMin.substring(0, i);
}
}
}
return strs[0].substring(0, strMin.length());
}
}
代码分析
这个题看似很简单,我先理解的是就以第一个字符串为参考,然后后面的都跟它比较,写出来不是很理想。整理思路后,
应该找出数组中最短的字符串(strMin.lenggth)用i来控制位数,然后按列来进行比较(strs.length)(第j个字符串的第i位)。
如果不相等,就返回子字符串;
如果不进入循环,比如[“”,”c”],返回substring(0,0)为空。
注意i,j的含义即可。