好像写的略过于麻烦了。思路是:以数组中的第一个字符串为基准,逐个扫描剩下的字符串中是不是以这个字符串为开头,如果全是,则这个字符串就为最长公共前缀字符串,否 则,让第一个字符串的长度向前走一个,以这个字符串为基准,继续寻找。
public class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length == 1) return strs[0]; if(strs.length == 0) return ""; for(int i = strs[0].length()-1; i >= 0; i--) { String tmp; if(i == 0) tmp = strs[0].charAt(0)+""; else tmp = strs[0].substring(0,i+1); if(tmp.isEmpty()) return ""; int count = 0; for(int j = strs.length-1; j >= 1; j--) { if(!strs[j].startsWith(tmp)) { break; } else { count++; } if(count == strs.length-1) return tmp; } } return ""; } }
另一种实现方法:
public class Solution { public String longestCommonPrefix(String[] strs) { if(strs.length==0)return ""; char[] str=strs[0].toCharArray(); int Min=str.length; for(int i=1;i<strs.length;i++){ char[] s=strs[i].toCharArray(); int j=0; while(j<Min && j<s.length && s[j]==str[j])j++; Min = Min>j?j:Min; } return strs[0].substring(0,Min); } }