题目描述:

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

寻找一组字符串的最长公共前缀. 首先, 如果只有一个字符串, 那么它就是最长公共前缀, 如果有两个, 那么再跟第二个字符串逐个字符对比, 找出最长公共前缀. 再增加字符串则依次类推.

在这个方法的基础上, 可以想到最长公共前缀一定不会比字符串数组中最短的字符串长, 因此可以先找到最短字符串, 以它为一开始的基准.

代码:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(strs.empty())
            return "";
        
        int shortestIndex = findShortest(strs);
        int prefixLen = strs[shortestIndex].length();
        int len = strs.size();
        
        for(int i = 0; i < len; i++){
            if(prefixLen == 0) return "";
            string s = strs[i];
            int l1 = prefixLen, l2 = s.length(), j;
            for(j = 0; j < l1 && j < l2; j++){
                if(strs[0][j] != s[j])
                    break;
            }
            
            if(j != l1 && j != l2){
                prefixLen = j;
            }
            else if(j == l2){
                prefixLen = l2;
            }
        }
        
        return strs[shortestIndex].substr(0, prefixLen);
    }
    
    int findShortest(vector<string> &strs){
        int minLen = INT_MAX, index;
        for(int i = 0; i < strs.size(); i++){
            if(strs[i].length() < minLen){
                minLen = strs[i].length();
                index = i;
            }
        }
        return index;
    }
};