編寫(xiě)一個(gè)函數(shù)來(lái)查找字符串?dāng)?shù)組中的最長(zhǎng)公共前綴。
如果不存在公共前綴,返回空字符串 ""。
示例 1:
輸入:strs = ["flower","flow","flight"]
輸出:"fl"
示例 2:
輸入:strs = ["dog","racecar","car"]
輸出:""
解釋:輸入不存在公共前綴。
來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-common-prefix
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
解題思路及方法
挺簡(jiǎn)單的一道題,首先字符串?dāng)?shù)組長(zhǎng)度小于等于1,直接返回它第一個(gè)元素。然后說(shuō)下我的思路,我將首字符串作為參照字符串跟剩下的每一個(gè)字符串作比較,從首字符串的首位開(kāi)始,只要有一位相同,就count++,然后繼續(xù)判定,然后只要第一次遇見(jiàn)不相同,就break,開(kāi)始首字符串跟下一個(gè)字符串比較。
用一個(gè)list記錄首字符串跟剩下每一個(gè)字符串公共字符的個(gè)數(shù),只要list里面有0元素,就說(shuō)明至少有一個(gè)字符串跟首字符串沒(méi)有公共前綴,返回空。否則就找到list里面最小的值,將首字符串的0-minLen賦給res,返回res。
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs.length <= 1) {
return strs[0];
}
// 初始值
String res = strs[0];
List<Integer> list = new ArrayList<>();
for (int i = 1; i < strs.length; i++) {
// 獲取兩者最短長(zhǎng)度
int len = Math.min(res.length(), strs[i].length());
int count = 0;
for (int j = 0; j < len; j++) {
if (res.charAt(j) == strs[i].charAt(j)) {
count++;
} else {
break;
}
}
list.add(count);
}
// 判斷是否有公共前綴
if (list.contains(0)) {
return "";
} else {
int minLen = Collections.min(list);
res = res.substring(0, minLen);
}
return res;
}
}
結(jié)果如下:
