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 是数组中的元素数量。主要为哈希表的开销。
持续更新中…