2024/07/18

LeetCode 14. Longest Common Prefix

問題:用於找到字符串數組中的最長公共前綴。如果沒有公共前綴,則返回空字符串。
/**
 * 找到字符串數組中的最長公共前綴
 * @param {string[]} strs - 字符串數組
 * @return {string} - 最長公共前綴,如果沒有公共前綴則返回空字符串
 */
var longestCommonPrefix = function (strs) {
    // 如果字符串數組為空或長度超過200,返回空字符串
    if (strs.length <= 0 || strs.length > 200) {
        return "";
    }

    // 如果只有一個字符串,返回該字符串
    if (strs.length === 1) {
        return strs[0];
    }

    // 將字符串數組按長度排序,最短的字符串在最前面
    strs = strs.sort((a, b) => a.length - b.length);
    // 取出最短的字符串作為參考
    const first = strs.pop();
    // 用於存儲公共前綴的字符數組
    const ary = [];
    
    // 遍歷參考字符串中的每個字符
    for (let i = 0; i < first.length; i++) {
        // 過濾出當前字符位置與參考字符串相同的字符串
        const filter = strs.filter(s => s[i] === first[i]);
        // 如果有任何字符串在當前字符位置不匹配,跳出循環
        if (filter.length !== strs.length) {
            break;
        }
        // 將匹配的字符添加到公共前綴字符數組中
        ary.push(first[i]);
    }

    // 如果公共前綴字符數組不為空,將其轉換為字符串並返回,否則返回空字符串
    return ary.length > 0 ? ary.join('') : "";
};