Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string ""
.
Example 1:
Input: ["flower","flow","flight"] Output: "fl"
Example 2:
Input: ["dog","racecar","car"] Output: "" Explanation: There is no common prefix among the input strings.
输出字符串数组的最长匹配前缀。
思路:以第一个字符串为基准,逐个匹配每个字符,不断迭代,输出结果。
public String longestCommonPrefix(String[] strs) { //空字符串数组 if(strs == null || strs.length == 0) { return ""; } //只有一个字符串的情形 if(strs.length == 1){ return strs[0]; } //多个字符串:1)第一个字符不同 2)第一个字符相同 if(strs[0].equals("")) { return ""; } char firstChar = strs[0].charAt(0); for(String str : strs) { if(str.equals("")) return ""; if(str.charAt(0) != firstChar) { return ""; } } //建立一个字符数组target,保存第一个字符串的所有字符,然后,与第二个字符串比较,得到交集截止索引endIndex,然后与第三个字符串比较,得到新的交集的截止锁endIndex,以此类推。 char[] target = strs[0].toCharArray(); int endIndex = target.length - 1; for(int i = 1; i < strs.length; i++) { int index = 0; endIndex = endIndex > strs[i].length()-1 ? strs[i].length()-1 : endIndex; while (index <= endIndex) { if(target[index] != strs[i].charAt(index)) { endIndex = index - 1; break; } index++; } } return getStr(target, endIndex); }
private String getStr(char[] target, int endIndex) { String result = ""; int index = 0; while (index <= endIndex){ result += target[index]; index++; } return result; }
在LeetCode上看到一个很简洁的Java实现:
public String longestCommonPrefixV2(String[] strs) { if(strs == null || strs.length == 0) { return ""; } String prefix = strs[0]; int i = 1; //每一次迭代都能利用前边迭代的结果 while (i < strs.length) { while(strs[i].indexOf(prefix) != 0) { //没有匹配的字符串,将prefix的最后一个字符移除,再次匹配 prefix = prefix.substring(0, prefix.length() -1); } i++; } return prefix; }