第一种算法,不需要任何排序的暴力算法,一个字符一个字符,一个字符串一个字符串去比较,时间复杂度O(m*n), m是数组长度,n是最短字符串的长度。
public String longestCommonPrefix(String[] strs) { StringBuilder res = new StringBuilder(); for (int j = 0; j < strs[0].length(); j++) { char c = strs[0].charAt(j); for (int i = 1; i < strs.length; i++) { if (j == strs[i].length()) return res.toString(); else if (strs[i].charAt(j) != c) return res.toString(); } res.append(c); } return res.toString(); }
第二种算法,把字符串数组排个序,只比较第一和最后一个字符串即可,因为如果第一和最后一个字符串的某个index的字符相同的话,那么中间的一定也相同。时间复杂度O(2*n) = O(n),n是最短字符串的长度.
public String longestCommonPrefix(String[] strs) { int n = strs.length; StringBuilder res = new StringBuilder(); Arrays.sort(strs); for(int i=0;i<strs[0].length();i++){ if(strs[0].charAt(i)==strs[n-1].charAt(i)){ res.append(strs[0].charAt(i)); }else return res.toString(); } return res.toString(); }