1. funciton longestCommonPrefix(strs) {
    2. //首先判断字符串数组是否为空
    3. if(strs.length == 0) {
    4. return ""
    5. }
    6. //将strs[0]作为初始值来进行比较
    7. let initStr = strs[0]
    8. for(let i = 1; i < strs.length; i++){
    9. //设置一个 j 来记录相等的字符串数
    10. let j = 0
    11. for(; j < initStr.length && j < strs[i].length; j++) {
    12. if(initStr[j] !== strs[i][j]) {
    13. break
    14. }
    15. }
    16. initStr = initStr.substr(0,j)
    17. //如果 initStr = "" 则说明没有相同的字符串
    18. if(initStr == "") {
    19. return initStr
    20. }
    21. }
    22. return initStr
    23. }
    1. //归并法
    2. /**
    3. * @param {string[]} strs
    4. * @return {string}
    5. */
    6. var longestCommonPrefix = function(strs) {
    7. if (strs === null || strs.length === 0) return "";
    8. return lCPrefixRec(strs)
    9. };
    10. // 若分裂后的两个数组长度不为 1,则继续分裂
    11. // 直到分裂后的数组长度都为 1,
    12. // 然后比较获取最长公共前缀
    13. function lCPrefixRec(arr) {
    14. let length = arr.length
    15. if(length === 1) {
    16. return arr[0]
    17. }
    18. let mid = Math.floor(length / 2),
    19. left = arr.slice(0, mid),
    20. right = arr.slice(mid, length)
    21. return lCPrefixTwo(lCPrefixRec(left), lCPrefixRec(right))
    22. }
    23. // 求 str1 与 str2 的最长公共前缀
    24. function lCPrefixTwo(str1, str2) {
    25. let j = 0
    26. for(; j < str1.length && j < str2.length; j++) {
    27. if(str1.charAt(j) !== str2.charAt(j)) {
    28. break
    29. }
    30. }
    31. return str1.substring(0, j)
    32. }