leetcode [Longest Common Prefix]

解法一:

    public class Solution {  
        public String longestCommonPrefix(String[] strs){  
            String res = "";  
            boolean flag = true;  
            for(int i = 0; flag; i++){  
                if(strs.length == 0){  
                    flag = false;//处理空串的情况  
                }  
                if(strs.length == 1){//  
                    flag = false;  
                    res = strs[0];  
                }  
                for(int j = 0; j < strs.length - 1; j++){  
                    if(strs[j].length() <= i || strs[j + 1].length() <= i){//防止下标越界  
                        flag = false;  
                        break;  
                    }  
                    if(strs[j].charAt(i) != strs[j + 1].charAt(i)){  
                        flag = false;  
                        break;  
                    }  
                }  
                if(flag){  
                    res += strs[0].charAt(i);  
                }  
            }  
            return res;  
        }  
    }  

 解法二(次优解):

    public class Solution {  
        public String longestCommonPrefix(String[] strs){  
            String res = "";  
            if(strs.length != 0){//防止下标越界,可以包含长度为1的情况  
                Arrays.sort(strs);//巧用排序这个函数,字符串排序是优先按字母,然后长度...的规则  
                //按次序比较排序后的第一个字符串与最后一个字符串即可  
                String temp1 = strs[0];  
                String temp2 = strs[strs.length - 1];  
                for(int i = 0; i < temp1.length() && i < temp2.length(); i++){  
                    if(temp1.charAt(i) == temp2.charAt(i)){  
                        res += temp1.charAt(i);  
                    }  
                    else{  
                        break;  
                    }  
                }  
            }  
            return res;  
        }  
    }  

 解法三(最优解):

    public class Solution {  
        public String longestCommonPrefix(String[] strs){  
            String res = "";  
            /*indexOf方法:返回 String对象内第一次出现子字符串的字符位置, 
             * 字符串的IndexOf()方法搜索在该字符串上是否出现了作为参数传递的字符串, 
             * 如果找到字符串,则返回字符的起始位置 (0表示第一个字符,1表示第二个字符依此类推) 
             * 如果说没有找到则返回 -1 
             *注: "".indexof("")的结果为0 
             */  
            /*public String substring(int beginIndex, int endIndex) 
             * 从beginIndex开始取,到endIndex结束,从0开始数,其中不包括endIndex位置的字符 
             * 注:string.substring(0,0)的结果为"" 
             */  
            if(strs.length != 0){//防止下标越界  
                res = strs[0];//先找到一个参考值,共同最大的字符串的长度肯定不会超过其中任何一个字符串的长度  
                for(int i = 1; i < strs.length; i++){//从参考字符串后的字符串开始  
                    while(strs[i].indexOf(res) != 0){  
                        res = res.substring(0, res.length() - 1);//遍历每一个字符串,调整要得的res  
                        //res.substring(0, res.length() - 1);而不是strs[i].substring(0, res.length() - 1);调整的是res  
                    }  
                }  
            }  
            return res;  
        }  
    }  

 

posted @ 2017-12-03 14:01  melon1ce  阅读(76)  评论(0)    收藏  举报