算法题前端解决方案——JavaScript代码实现

1. 比较版本号

思想:字符串转为数组,一一对比。

function Compare(verson1, verson2) {
      let v1Arr = verson1.split(".");
      let v2Arr = verson2.split(".");
      let i = 0,
        j = 0;
      while (i < v1Arr.length || j < v2Arr.length) {
        let str1 = v1Arr[i] || 0;
        let str2 = v2Arr[j] || 0;
        if (str1 - str2 > 0) {
          return 1;
        } else if (str1 - str2 < 0) {
          return -1;
        }
        i++;
        j++;
      }
      return 0;
   }

运行通过!牛客网链接
通过

2. 找字符串中重复次数最多的字符

  function findMaxStr(str) {
      let res = {};
      for (let i = 0; i < str.length; i++) {
        if (!res[str.charAt(i)]) {
          res[str.charAt(i)] = 1;
        } else {
          res[str.charAt(i)] = res[str.charAt(i)]+1; // 如果有,增加一次
        }
      }
      let iMax = 0,
        target = "";
      for (let key in res) {
        if (res[key] > iMax) {
          iMax = res[key]; // iMax要被重写
          target = key;
        }
      }
      console.log('res:',res);
      console.log( "出现次数最多的是:" + target + ", 出现" + iMax + "次");
    }
    findMaxStr('sabcdEs')

3. 是否是回文数

function isPalindrome(s) {
 s = s + '' ;  // 如果输入的是数字,要转化为字符串。或 s.toString()
 let newS = s.length && s.split('').reverse().join('') // 翻转字符串
 return s === newS
}

4. 最长回文子串

5. JS数组转树

https://www.jb51.net/article/253093.htm

6. 括号匹配

/**
 * @param {string} s
 * @return {boolean}
 */
// var isValid = function(s) {
//     // if(type s !=='String' ){
//     //     return false;
//     // }
//     let flag = true;
//     const getAfterS= (beforeS)=>{
//         let afterS;
//         switch(beforeS){
//             case '(': afterS=')'; break;
//             case '[': afterS=']'; break;
//             case '{': afterS='}'; break;
//         }
//         return afterS;
//     }
//     const arr = s.split('');

//     for(let i=0; i<arr.length; i++){
//         if(arr[i] && arr[i+1] !== getAfterS(arr[i])){
//             return false;
//         }
//         i++;
//     }
//     return flag;
// };
// isValid('()[]')

// var isValid = function (s) {
//   const stack = [];
//   for (let i = 0; i < s.length; i++) {
//     let c = s[i];
//     switch (c) {
//       case '(':
//         stack.push(')');
//         break;
//       case '[':
//         stack.push(']');
//         break;
//       case '{':
//         stack.push('}');
//         break;
//       default:
//         if (c !== stack.pop()) {
//           return false;
//         }
//     }
//   }
//   return stack.length === 0;
// };
// 简化版本
var isValid = function(s) {
    const stack = [], 
        obj = {
            "(":")",
            "{":"}",
            "[":"]"
        };
    for(const x of s) {
        if(x in obj) {
            stack.push(x);
            continue;
        };
        if(obj[stack.pop()] !== x) return false;
    }
    return !stack.length;
};

7. 两数之和,哈希表解法

var twoSum = function (nums, target) {
    const mapHash = new Map();
    for (let i = 0, leng = nums.length; i < leng; i++) {
        const resetNum = target - nums[i];
        // 哈希表有,则返回两数下标
        if (mapHash.has(resetNum)) {
            return [mapHash.get(resetNum), i];
        } else {
            // 若没有,存入当前值和下标,key,value
            mapHash.set(nums[i], i);
        }
    }
    return [-1, -1]
};
twoSum([2, 7, 11, 15], 9)

时间复杂度:O(N),其中 N 是数组中的元素数量。对于每一个元素 x,我们可以 O(1) 地寻找 target - x

空间复杂度:O(N),其中 N 是数组中的元素数量。主要为哈希表的开销。


持续更新中…

猜你喜欢

转载自blog.csdn.net/aaqingying/article/details/128434993