脚本宝典收集整理的这篇文章主要介绍了js实例教程-leetcode宝石与石头Javascript实现方法(代码教程),脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。
问题:
给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。
方法1:作为一个刚刷leetcode的新手,第一次我的解法是这样的:
VAR numJewelsInStones = function(J, S) {
let array = [];
let count = 0;
array.foreach(item=>{
if(J.includes(item)){
count++;
}
})
return count;
};
这种方法的思路是将“石头”分成一个数组,如果“宝石”中包括里面的元素,那么count++;貌似没啥毛病。但是此方法的复杂度是m*n(石头的长度m和宝石的长度n)。因为include方法也是需要遍历字符串的长度的。
方法2:
var numJewelsInStones = function(J, S) {
let array1 = J.split('');
let array2 = S.split('');
let count = 0;
let obj = {};
array1.forEach(item=>{
obj[item] = 1; //将宝石变成键值对的存储对象
})
array2.forEach(item=>{
if(array1[item]){
count++;
}
}
)
return count;
};
因为宝石是不重复的,可以将宝石存储为键值对的形式,keys就是宝石的类型。如果在石头中key存在,那么count++;不存在的话,array1[item]是undefined,那么count不增加。方法2复杂度更为简单。
类似问题:字符串的去重?
var clearRePEatWords = function(S) {
let array1 = S.split('');
let obj = {};
// let array2 = [];
array1.forEach(item=>{
if(!obj[item]){
// array2.push(item);
obj[item] = 1;
}
})
let array2 = Object.keys(obj);
let newString = array2.join('');
return newString;
};
这里去重也用到了键值对的方式。将字符串中的每个子元素设置键值对,如果键值不存在,就放进obj中。最后我们可以把item存到一个数组,也可以直接使用对象的Object.keys()来取键值。
知识补充:
1.字符串与数组之间的转换
let arr = [a,b,c];
let string1 = arr.join(''); //"abc"
let string2 = arr.join('-'); //"a-b-c"
let arr1 = string1.split(''); //[a,b,c]
let arr2 = string2.split('-'); //[a,b,c]
2.数组转换为键值对
var obj = {};
//方法1
var a= [1,2,3,4,5];
for (var x in arr){
obj[x] = x;
}
//方法2
a.map(function(item,i){
return b[i]= item; //注意map方法是需要return;否则会是undefined;
});
//方法3
var a = ['a','b','c']
var obj = {}
a.forEach((item,index)=>{obj[index] = item})
问题:
给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。
方法1:作为一个刚刷leetcode的新手,第一次我的解法是这样的:
var numJewelsInStones = function(J, S) {
let array = [];
let count = 0;
array = S.split('');
array.forEach(item=>{
if(J.includes(item)){
count++;
}
})
return count;
};
这种方法的思路是将“石头”分成一个数组,如果“宝石”中包括里面的元素,那么count++;貌似没啥毛病。但是此方法的复杂度是m*n(石头的长度m和宝石的长度n)。因为include方法也是需要遍历字符串的长度的。
方法2:
var numJewelsInStones = function(J, S) {
let array1 = J.split('');
let array2 = S.split('');
let count = 0;
let obj = {};
array1.forEach(item=>{
obj[item] = 1; //将宝石变成键值对的存储对象
})
array2.forEach(item=>{
if(array1[item]){
count++;
}
}
)
return count;
};
因为宝石是不重复的,可以将宝石存储为键值对的形式,keys就是宝石的类型。如果在石头中key存在,那么count++;不存在的话,array1[item]是undefined,那么count不增加。方法2复杂度更为简单。
类似问题:字符串的去重?
var clearRepeatWords = function(S) {
let array1 = S.split('');
let obj = {};
// let array2 = [];
array1.forEach(item=>{
if(!obj[item]){
// array2.push(item);
obj[item] = 1;
}
})
let array2 = Object.keys(obj);
let newString = array2.join('');
return newString;
};
这里去重也用到了键值对的方式。将字符串中的每个子元素设置键值对,如果键值不存在,就放进obj中。最后我们可以把item存到一个数组,也可以直接使用对象的Object.keys()来取键值。
知识补充:
1.字符串与数组之间的转换
let arr = [a,b,c];
let string1 = arr.join(''); //"abc"
let string2 = arr.join('-'); //"a-b-c"
let arr1 = string1.split(''); //[a,b,c]
let arr2 = string2.split('-'); //[a,b,c]
2.数组转换为键值对
var obj = {};
//方法1
var a= [1,2,3,4,5];
for (var x in arr){
obj[x] = x;
}
//方法2
a.map(function(item,i){
return b[i]= item; //注意map方法是需要return;否则会是undefined;
});
//方法3
var a = ['a','b','c']
var obj = {}
a.forEach((item,index)=>{obj[index] = item})
觉得可用,就经常来吧!Javascript技巧 脚本宝典 欢迎评论哦! js技巧,巧夺天工,精雕玉琢。小宝典献丑了!
以上是脚本宝典为你收集整理的js实例教程-leetcode宝石与石头Javascript实现方法(代码教程)全部内容,希望文章能够帮你解决js实例教程-leetcode宝石与石头Javascript实现方法(代码教程)所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。