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的含義即可。