Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings.

找出所有字符串中的共同字符串前缀。

方法一:让第一个字符串作为基准,遍历该字符串,依次将该字符串中的每个字符跟其他所有字符串相应字符比较,只要有一个不一样,就停止。

其实正确的基准应该是选择字符串长度最小的,这里没有选择,就会出现下标越界,可以用try-catch处理,只要出现越界异常,该字符就不会相等

public  String longestCommonPrefix(String[] strs) {
            if(strs==null||strs.length==0)
                return "";
            if(strs.length==1)
                return strs[0];
            int i;
            //遍历基准字符串中的每个字符,并去所有 其他字符串比对该位置上是不是此字符,如果是,则比较下一个字符,不是则跳出循环
            for(i=0;i<strs[0].length();i++){
               if(!comm(strs,i,strs[0].charAt(i))){
                   break;
               }
            }
            if(i>0){
            return strs[0].substring(0, i);
            }else
                return "";
        }
        //比较所有字符串的第k个位置上的字符是不是c,只要有一个不是,或者下标越界异常,就返回false,表示该字符不满足。
        public   boolean comm(String[] strs,int k,char c){
            
            for(int i=1;i<strs.length;i++){
                try{
                    if(strs[i].charAt(k)!=c)
                        return false;
                }catch(IndexOutOfBoundsException e){
                    return false;
                }
            }
            return true;
        }

还有大神提出,先排序在比较第一个和最后一个字符串

public  String longestCommonPrefix(String[] strs) {
        if(strs==null||strs.length==0) return "";
        if(strs.length==1) return strs[0];
        
        Arrays.sort(strs);
        
        char[] first=strs[0].toCharArray();
        char[] last=strs[strs.length-1].toCharArray();
        int i,j;
        for( i=0,j=0;i<first.length&&j<last.length;i++,j++){
            if(first[i]!=last[j]) break;
        }
        return strs[0].substring(0,i);
        
    }
原文地址:https://www.cnblogs.com/xiaolovewei/p/8059128.html