Idiot-maker

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

https://oj.leetcode.com/problems/longest-common-prefix/

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

解题思路:

这题属于比较简单的基本题目。我采用的方法是,从第一位起,比较数组中每个字符串的该位,如果和第一个字符串的该位不同,就立刻返回该位之前的字符串,如果当前位数大于该字符串长度,也立刻返回该字符串。否则继续往后。

下面的方法,是一个two pass的方法,可以先找出最短的那个字符串,省得后面判断长度。

public class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length == 0){
            return "";
        }
        
        int minLength = strs[0].length();
        for(String str : strs){
            if(str.length() < minLength){
                minLength = str.length();
            }
        }
        
        for(int i = 0; i < minLength; i++){
            char record = strs[0].charAt(i);
            for(String str : strs){
                if(str.charAt(i) != record){
                    return str.substring(0, i);
                }
            }
        }
        return strs[0].substring(0, minLength);
    }
}

下面是一个one pass的方法,遇到当前i超过自身长度的,直接返回自身即可。

public class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length == 0){
            return "";
        }
        
        // int minLength = strs[0].length();
        // for(String str : strs){
        //     if(str.length() < minLength){
        //         minLength = str.length();
        //     }
        // }
        
        for(int i = 0; ; i++){
            if(i > strs[0].length() - 1){
                return strs[0];
            }
            char record = strs[0].charAt(i);
            for(String str : strs){
                if(i > str.length() - 1){
                    return str;
                }
                if(str.charAt(i) != record){
                    return str.substring(0, i);
                }
            }
        }
        // return strs[0].substring(0, minLength);
    }
}

 

posted on 2015-02-13 13:21  NickyYe  阅读(202)  评论(0编辑  收藏  举报