JS_算法题_02

题目描述
给定字符串 str,检查其是否包含数字,包含返回 true,否则返回 false
示例1
输入
‘abc123’
输出
true

解决方法: 正则表达式

function containsNumber(str) {
     var b = /\d/;
     return b.test(str);
}

题目描述
给定字符串 str,检查其是否包含连续重复的字母(a-zA-Z),包含返回 true,否则返回 false
示例1
输入
‘rattler’
输出
true

解决方法: 在正则表达式中,利用()进行分组,使用斜杠加数字表示引用,\1就是引用第一个分组,\2就是引用第二个分组。将[a-zA-Z]做为一个分组,然后引用,就可以判断是否有连续重复的字母。

function containsRepeatingLetter(str) {
  return /([a-zA-Z])\1/.test(str);
}

题目描述
给定字符串 str,检查其是否以元音字母结尾
1、元音字母包括 a,e,i,o,u,以及对应的大写
2、包含返回 true,否则返回 false
示例1
输入
‘gorilla’
输出
true

解决方法: 正则表达式

function endsWithVowel(str) {
    var reg = /(a|o|e|i|u)$/gi;
    return reg.test(str);
}

题目描述
给定字符串 str,检查其是否包含 连续3个数字
1、如果包含,返回最先出现的 3 个数字的字符串
2、如果不包含,返回 false
示例1
输入
‘9876543’
输出
987

解决方法: 正则表达式

function captureThreeNumbers(str) {
  var reg;
  if(reg = str.match(/(\d{3})/)){
    return reg[0];
  }else{
    return false;
  }}

题目描述
给定字符串 str,检查其是否符合如下格式
1、XXX-XXX-XXXX
2、其中 X 为 Number 类型
示例1
输入
‘800-555-1212’
输出
true

解决方法: 正则表达式
本题需要注意格式,开头和结尾$必须加上来限定字符串,3个数可表示为\d{3},4个数则为\d{4},{n}表示前面内容出现的次数。正则表达式可写作/^\d{3}-\d{3}-\d{4}$/,有相同部分\d{3}-,因此也可写作/(\d{3}-){2}\d{4}$/

function matchesPattern(str) {
    var reg = /^\d{3}-\d{3}-\d{4}$/;
    return reg.test(str);
}

题目描述
给定字符串 str,检查其是否符合美元书写格式
1、以 $ 开始
2、整数部分,从个位起,满 3 个数字用 , 分隔
3、如果为小数,则小数部分长度为 2
4、正确的格式如:$1,023,032.03 或者 $2.03,错误的格式如:$3,432,12.12 或者 $34,344.3
示例1
输入
‘$20,933,209.93’
输出
true

解决方法: 正则表达式

function isUSD(str) {
    var reg = /^\$([1-9]\d{0,2}(,\d{3})*|0)(\.\d{2}?$)/;
    return reg.test(str);
}

题目描述
查找两个节点的最近的一个共同父节点,可以包括节点自身
输入描述:
oNode1 和 oNode2 在同一文档中,且不会为相同的节点

解决方法: parentNode

function commonParentNode(oNode1, oNode2) {
     if(oNode1.contains(oNode2)){
        return oNode1;
    }else{
        return commonParentNode(oNode1.parentNode,oNode2);
    }
}

题目描述
根据包名,在指定空间中创建对象
输入描述:
namespace({a: {test: 1, b: 2}}, ‘a.b.c.d’)
输出描述:
{a: {test: 1, b: {c: {d: {}}}}}

解决方法: hasOwnProperty

function namespace(oNamespace, sPackage) {
    var packNameArr=sPackage.split(".");
    var curObj=oNamespace;
    for(var i=0;i<packNameArr.length;i++){
        if(!curObj.hasOwnProperty(packNameArr[i])){
            curObj[packNameArr[i]]={};
            curObj=curObj[packNameArr[i]];
        }
    }
    return oNamespace;
}

题目描述
为 Array 对象添加一个去除重复项的方法
示例1
输入
[false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a’, ‘a’, NaN]
输出
[false, true, undefined, null, NaN, 0, 1, {}, {}, ‘a’]

解决方法: ES6

Array.prototype.uniq = function () {
    return [...new Set(this)];
}

//  法二
Array.prototype.uniq = function () {
      var resArr = [];
      var flag = true;

       for(var i=0;i<this.length;i++){
           if(resArr.indexOf(this[i]) == -1){
               if(this[i] != this[i]){   //排除 NaN
                  if(flag){
                       resArr.push(this[i]);
                       flag = false;
                  }
               }else{
                    resArr.push(this[i]);
               }
           }
       }
        return resArr;
}

题目描述
用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等

解决方法: 递归

function fibonacci(n) {
      if(n==1||n==2)
        return 1;
    return fibonacci(n-1)+fibonacci(n-2);
}

题目描述
按所给的时间格式输出指定的时间
格式说明
对于 2014.09.05 13:14:20
yyyy: 年份,2014
yy: 年份,14
MM: 月份,补满两位,09
M: 月份, 9
dd: 日期,补满两位,05
d: 日期, 5
HH: 24制小时,补满两位,13
H: 24制小时,13
hh: 12制小时,补满两位,01
h: 12制小时,1
mm: 分钟,补满两位,14
m: 分钟,14
ss: 秒,补满两位,20
s: 秒,20
w: 星期,为 [‘日’, ‘一’, ‘二’, ‘三’, ‘四’, ‘五’, ‘六’] 中的某一个,本 demo 结果为 五
示例1
输入
formatDate(new Date(1409894060000), ‘yyyy-MM-dd HH:mm:ss 星期w’)
输出
2014-09-05 13:14:20 星期五

解决方法: 时间格式化

function formatDate(oDate, sFormation) {
    var add0 = function(num){
        if(num<10)
            return 0+""+num;
        else
            return num;
 
    }
    var o = {
        "yyyy":oDate.getFullYear(),
        "yy":oDate.getFullYear()%100,
        "MM":add0(oDate.getMonth()+1),
        "M":oDate.getMonth()+1,
        "dd":add0(oDate.getDate()),
        "d":oDate.getDate(),
        "HH":add0(oDate.getHours()),
        "H":oDate.getHours(),
        "hh":add0(oDate.getHours()%12),
        "h":oDate.getHours()%12,
        "mm":add0(oDate.getMinutes()),
        "m":oDate.getMinutes(),
        "ss":add0(oDate.getSeconds()),
        "s":oDate.getSeconds(),
        "w":function(){
            var day = ["日","一","二","三","四","五","六"];
            return day[oDate.getDay()];
        }(),
    }
    for(var k in o){
        sFormation = sFormation.replace(k,o[k]);
    }
    return sFormation;
}

题目描述
如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1
否则如果字符 Unicode 编码 > 255 则长度为 2
示例1
输入
‘hello world, 牛客’, false
输出
17

解决方法: charCodeAt()

function strLength(s, bUnicode255For1) {
     if( bUnicode255For1 ){
        return s.length;
    }else{
        var len = s.length;
        for( var i=0; i<s.length; i++ ){
            if( s.charCodeAt(i) > 255 ){
                len++;
            }
        }
        return len;
    }
}

题目描述
判断输入是否是正确的邮箱格式
输入描述:
邮箱字符串
输出描述:
true表示格式正确

解决方法: 正则表达式

function isAvailableEmail(sEmail) {
    var reg=/^([\w+\.])+@\w+([.]\w+)+$/;
    return reg.test(sEmail);
}

题目描述
将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff
rgb 中每个 , 后面的空格数量不固定
十六进制表达式使用六位小写字母
如果输入不符合 rgb 格式,返回原始输入
示例1
输入
‘rgb(255, 255, 255)’
输出
#ffffff

解决方法: 正则表达式

function rgb2hex(sRGB) {
   return sRGB.replace(/^rgb\((\d+)\s*\,\s*(\d+)\s*\,\s*(\d+)\)$/g, function(a, r, g, b){
       return '#' + hex(r) + hex(g) + hex(b);
   });
}
function hex(n){
    return n < 16 ? '0' + (+n).toString(16) : (+n).toString(16);
}

题目描述
css 中经常有类似 background-image 这种通过 - 连接的字符,通过 javascript 设置样式的时候需要将这种样式转换成 backgroundImage 驼峰格式,请完成此转换功能

  1. 以 - 为分隔符,将第二个起的非空单词首字母转为大写
  2. -webkit-border-image 转换后的结果为 webkitBorderImage
    示例1
    输入
    ‘font-size’
    输出
    fontSize

解决方法: 正则表达式

function cssStyle2DomStyle(sName) {
    return sName.replace(/\-[a-z]/g , function(a, b){
        return b == 0 ? a.replace('-','') : a.replace('-','').toUpperCase();
    });
}

题目描述
统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率

  1. 不限制 key 的顺序
  2. 输入的字符串参数不会为空
  3. 忽略空白字符
    示例1
    输入
    ‘hello world’
    输出
    {h: 1, e: 1, l: 3, o: 2, w: 1, r: 1, d: 1}

解决方法: 正则表达式

function count(str) {
  var obj = {};
    str.replace(/\S/g,function(s){
        !obj[s]?obj[s]=1:obj[s]++;
    })
    return obj;
}

// 法②
function count(str) {
    for(var i=0, m=str.length, res={}; i<m; i++){
        if(str.charAt(i) in res) res[str.charAt(i)]++;
        else res[str.charAt(i)] = 1;
    }
    return res;
}

以上这篇JS题目均来自牛客网,感兴趣的也可以前往牛客网在线编程练习。同时如果文中有不当之处,也欢迎指正,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值