写一个函数来找出一个字符串数组中最长的通用前缀。如果没有通用前缀,返回空字符串 ""

####例子1:

Input: ["flower","flow","flight"]
Output: "fl"

####例子2:

Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.

####注意 所有给定的输入都是小写字母 a-z

解法1:

从头到尾依次遍历对比,获得通用前缀。时间复杂度O(s)(s是所有字符串加起来的字符总数),空间复杂度O(1)。

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    if (!strs || !strs.length) { // 空数组
        return '';
    }
    let result = strs[0];
    return strs.reduce((pre, curr) => {
        let prefix = '';
        // 逐位对比
        for(let i = 0; i< curr.length; i++) {
            if (!pre[i] || curr[i] !== pre[i]) {
                break;
            } else {
                prefix += pre[i];
            }
        }
        return prefix;
    }, result);
};

####解法2: 利用sort函数。sort函数默认会将元素按ASCII码从小到大来排序,排序完成后,只需要对比首位和末尾元素取通用前缀即可。

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    if (!strs || !strs.length) { // 空数组
        return '';
    }
    strs.sort();
    let first = strs[0];
    let last = strs[strs.length - 1];
    let index = 0;
    while(index <= first.length && index <= last.length && first.charAt(index) === last.charAt(index)) {
          index ++;
    }
    return first.slice(0, index);
};