题目

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”

示例

  1. 示例 1:
  2. 输入: ["flower","flow","flight"]
  3. 输出: "fl"
  4. 示例 2:
  5. 输入: ["dog","racecar","car"]
  6. 输出: ""
  7. 解释: 输入不存在公共前缀。
  8. 说明:
  9. 所有输入只包含小写字母 a-z

解析

Method Me

  1. var getMaxLenPubPrefix = function (arr) {
  2. arr = arr.sort((a, b) => a.length - b.length)
  3. const minLenStr = arr.splice(0, 1)[0]
  4. let maxLenPrefix = ''
  5. for (let i = 0, iLen = minLenStr.length; i < iLen; i++) {
  6. const currChat = minLenStr[i]
  7. const currChatEqual = arr.every(item => item[i] === currChat)
  8. if (currChatEqual) {
  9. maxLenPrefix += currChat
  10. } else {
  11. break
  12. }
  13. }
  14. return maxLenPrefix
  15. }

Method
思路分析:

实现方法一:双层for循环
逐位比较,比较全部通过时re增加当前字符,不通过时直接返回re。

实现方法二:for循环+正则
re初始化为数组中第一个元素,逐个比较,当比较通过时返回re,否则削去末位直至比较通过

  1. var longestCommonPrefix = function(strs) {
  2. var re = '';
  3. if (!strs.length) return re;
  4. for (var j=0;j<strs[0].length;j++){//第j位
  5. for (var i=1;i<strs.length;i++){//第i个
  6. if (strs[i][j]!=strs[0][j]) return re
  7. }
  8. re += strs[0][j];
  9. }
  10. return re;
  11. };
  12. var longestCommonPrefix = function(strs) {
  13. var re = strs[0] ? strs[0]:'';
  14. for (var i=1;i<strs.length;i++){
  15. var regex = new RegExp('^'+re);
  16. while (!regex.test(strs[i])&&re.length){
  17. re = re.slice(0,re.length-1);
  18. regex = new RegExp('^'+re);
  19. }
  20. }
  21. return re;
  22. };