Question
Write a function to find the longest common prefix string amongst an array of strings.
Solution
第一思路是用Trie,但是对于一道Easy类别的题目,用Trie显然是杀鸡用牛刀。
于是我们可以参考到构造Trie的过程,来找这个最长prefix。
我们先用String array中第一个String初始化Pre,然后遍历剩下的每一个String,找重合的终点,删除不重合的部分。
1 public class Solution { 2 public String longestCommonPrefix(String[] strs) { 3 if (strs == null || strs.length < 1) { 4 return ""; 5 } 6 int length = strs.length; 7 int initLen = strs[0].length(); 8 StringBuilder result = new StringBuilder(initLen); 9 for (int i = 0; i < initLen; i++) { 10 result.append(strs[0].charAt(i)); 11 } 12 for (int i = 1; i < length; i++) { 13 String curString = strs[i]; 14 initLen = result.length(); 15 for (int j = 0; j < initLen; j++) { 16 if (j < curString.length() && curString.charAt(j) == result.charAt(j)) { 17 continue; 18 } 19 result.delete(j, initLen); 20 break; 21 } 22 } 23 return result.toString(); 24 } 25 }
更简单的方法是用String.indexOf()的方法来判断重合终点。
1 public class Solution { 2 public String longestCommonPrefix(String[] strs) { 3 if (strs == null || strs.length < 1) { 4 return ""; 5 } 6 int length = strs.length; 7 int initLen = strs[0].length(); 8 String prev = strs[0]; 9 for (int i = 0; i < length; i++) { 10 String curString = strs[i]; 11 while (curString.indexOf(prev) != 0) { 12 prev = prev.substring(0, prev.length() - 1); 13 } 14 } 15 return prev; 16 } 17 }