符号匹配使用栈的思想,已做。
indexOf(要检查的字符串) 方法可返回某个指定的字符串值在字符串中首次出现的位置。stringObject.slice(start,end)方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
var reorderLogFiles = function(logs) {
let num =[];
let str =[];
for(let i of logs){
const p = i.split(" ");
if(isNaN(p[1])){str.push(i);}//isNaN()查看是否为字符,1是,0不是
else{num.push(i);}
}
str.sort();//对标识符进行排序
str.sort((x,y)=>{//x.indexOf(" ")标识符后的空格位置
//x.slice(x.indexOf(" "))提取标识符后的句子
return x.slice(x.indexOf(" "))<y.slice(y.indexOf(" "))?-1:1;})
return [...str,...num];
};
sort()如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
var addStrings = function(num1, num2) {
let i = num1.length-1;
let j = num2.length-1;
let res=[];
let carry =0;//进位
while(i>=0||j>=0||carry){
let v1 = i>=0?num1[i]:0;//补0
let v2 = j>=0?num2[j]:0;
//console.log(v1,v2);
res.push((+v1 + +v2 +carry)%10);
// console.log(res);
if(+v1 + +v2 +carry>9){carry = 1;}
else{carry = 0;}
i--;j--;
}
return res.reverse().join('');
};
res.reverse().join('');数组取倒序合并为一个字符串。
巧用函数,再次判断
var iseque=function(l,r,s){
while(l<r){
if(s[l]!=s[r]){
return false;
}
l++;r--;
}
return true;
}
var validPalindrome = function(s) {
let l =0;
let r =s.length-1;
while(l<r){
if(s[l]!=s[r]) return iseque(l+1,r,s)||iseque(l,r-1,s);
l++;r--;
}
return true;
};
同上字符串相加
var addBinary = function(a, b) {
let i = a.length-1;
let j = b.length-1;
let carry =0;
let res= [];
while(i>=0||j>=0||carry){
let v1=i>=0?a[i]:0;
let v2=j>=0?b[j]:0;
// console.log(v1,v2);
res.push((+v1+ +v2+carry)%2);
if(+v1+ +v2+carry>1) {carry =1;}
else{carry =0;}
i--;j--;
}
return res.reverse().join('');
};
找规律,利用哈希表,不要傻乎乎列举
var romanToInt = function(s) {
let i = s.length-1;
let map = new Map([['I',1],['V',5],['X',10],['L',50],['C',100],['D',500],['M',1000]]);
let ans= map.get(s[i]);
while(i>0){
i--;
const p = i+1;
if(map.get(s[i])>=map.get(s[p])){ans+=map.get(s[i]);
}
else{ans-=map.get(s[i]);}
}
return ans;
};