longestCommonPrefix

Description:

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

 

Thoughts:

1.定义一个结果字符串result="";

2.如果List的长度为0,那么直接返回result;

3.找到数组中最短的字符串min_str;

4.将min_str从索引为0开始的字符,逐一的和其他的字符串的相应位置的字符进行比较

5.如果所有字符串当前的字符都是一致的话,就将当前字符append到result中;否则的话返回result;

6.重复过程4,5直到min_str全部比较完成

 

以下是我的java代码

package easy;

public class LongestCommonPrefix {
    /*返回长度最短的字符串在List中所在的位置*/
    private static int shortestStringLength(String[] strs){
        
        //判断当前的List中是否有字符串,没有的话返回-1,否则返回当前list中长度最短的字符串所在的位置
        if(strs.length == 0){
            return -1;
        }else{
            int result = strs[0].length();
            int record = 0;
            for(int i = 1; i<strs.length;i++){
                if(result>strs[i].length()){
                    result = strs[i].length();
                    record = i;
                }
            }
            return record;
        }
        
    }
    
    public static String longestCommonPrefix(String[] strs){
        String result = "";
        int m = shortestStringLength(strs);
        /*shortestStringLength的返回值等于-1,说明strs中没有字符串,结果为空;
         * 否则的话,利用最短的字符串,逐个的比较其他的字符串是否包含当前最短字符串的前缀。从而不断地增加前缀的长度。
        */
        if(m == -1){
            return result;
        }else{
            int n = strs.length;
            for(int i = 0;i<strs[m].length();i++){
                char a = strs[m].charAt(i);
                for(int j = 0; j< n;j++){
                    if(a != strs[j].charAt(i)){
                        return result;
                    }
                }
                result = result+a;
            }
            return result;
        }
        
    }
    
    public static void main(String[] args){
        String[] strs = new String[]{"ac","ac","a","a"};
        String result = longestCommonPrefix(strs);
        System.out.println(result);
    }
}

 

posted @ 2017-09-06 09:10  whatyouknow123  阅读(148)  评论(0编辑  收藏  举报