//我的方法 public String longestCommonPrefix(String[] strs) { //如果字符串数组长度是0,则返回“”,如果数组长度是1,那么直接返回这一条String if(strs.length==0){ return ""; }else if(strs.length==1){ return strs[0]; } String s = ""; //比较strs[0]的从第0位开始,每次取出一个字符比较,若数组中所有这个位的字符都相等,则加入公共字符串s,进行下个循环 for(int i=0; i<strs[0].length(); i++){ for(int j=1; j<strs.length; j++){ //如果遍历指针到达某个元素元素末尾或者某个元素该位匹配不想等,则返回s if((i>=strs[j].length()) || (strs[0].charAt(i) != strs[j].charAt(i))) return s; } s = s+strs[0].charAt(i); } return s; } //leetcode的方法 public String longestCommonPrefix1(String[] strs) { if(strs == null || strs.length == 0) return ""; String pre = strs[0]; int i = 1; while(i < strs.length){ //拿第一个做模板,匹配到数组中第一个元素的最长公共前缀字符串,然后以这个为模板,以此类推匹配下边所有的元素,最后返回最终模板 //indexOf是检测子串并返回子串起始位置的函数 while(strs[i].indexOf(pre) != 0) //如果pre不是子串,就去掉pre末尾一位重新比较,直到是子串或者pre长度0时就会跳出本次循环去匹配下一轮外循环 pre = pre.substring(0,pre.length()-1); i++; } return pre; }