首页 > 试题广场 >

获取字符串的长度

[编程题]获取字符串的长度
  • 热度指数:33785 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1
否则如果字符 Unicode 编码 > 255 则长度为 2
示例1

输入

'hello world, 牛客', false

输出

17
function strLength(s, bUnicode255For1) {
    if(bUnicode255For1) return s.length
    else{
        let len = 0;
        for(let i of s) {
            i.charCodeAt() > 255 ? len += 2 : len += 1;
        }
        return len;
    }
}
发表于 2021-06-03 21:30:27 回复(0)
function strLength(s, bUnicode255For1) {
    if(bUnicode255For1){
        return s.length;
    }else{
        let arr = s.split('').filter(ch => ch.charCodeAt(0) > 255);
        return s.length + arr.length;
    }
}

发表于 2021-04-19 11:27:21 回复(0)
function strLength(s, bUnicode255For1) {
    return (bUnicode255For1 ? s : s.replace(/[^\x00-\xff]/g, '11')).length;
}

[\x00-\xff]表示​0-255的ASCII码值
[^\x00-\xff] 前面取非(^)就表示大于255的ASCII码值了, 是双字节了
替换成任意占2位的字符,最后结果则是返回字符串长度

发表于 2021-02-24 17:33:39 回复(0)
function strLength(s, bUnicode255For1) {
  return bUnicode255For1 ? s.length : [...s].reduce((a, b) => a + (b.charCodeAt(0) > 255 ? 2 : 1), 0)
}
编辑于 2021-02-24 16:56:59 回复(0)
function strLength(s, bUnicode255For1) {
    var sum1=0;
    if(bUnicode255For1){
        return s.length;
    }
    else{
        for(var i in s){
            if(s[i].charCodeAt()>255){
                sum1+=2;
            }
            else{
                sum1+=1;
            }
        }
    }
    return sum1;
}
发表于 2019-08-17 19:03:34 回复(0)
function strLength(s, bUnicode255For1) {
    if(bUnicode255For1){
        return s.length;
    }
     s = s.replace(/[^\x00-\xff]/g,'**');  //先将中文替换为字符,再计算长度
     var len = s.length;
     return len;
}
发表于 2019-02-15 19:59:16 回复(0)
function strLength(s, bUnicode255For1) {
    if(bUnicode255For1){
        return s.length;
    }else{
        var len=0;
        for(var i=0;i<s.length;i++){
            if(s.charCodeAt(i)>255)
                len+=2;
            else
                len+=1;
        }
        return len;
    }
}
发表于 2018-07-09 21:29:39 回复(0)
function strLength(s, bUnicode255For1) {
    var sArr = s.split("");
    var length = s.length;
    if(!bUnicode255For1){
        for(var i in sArr){
            if(sArr[i].charCodeAt() > 255 ){
                length++;
            }
        }
    }
    return length;
}
发表于 2018-03-28 17:57:38 回复(0)
function strLength(s, bUnicode255For1) {
    if(bUnicode255For1 === true){
        return s.length;
    } 
    var num = 0;;
    //es6 (  for of  )
    //for(var x of s){
    //    x.charCodeAt()>255?num+=2:num+=1;
    //}
    for(var i=0;i<s.length;i++){
        s.charCodeAt(i)>255?num+=2:num+=1;
    }
    
    return num;
}
用es6 新特性 for of 更加简单 可是牛客不支持~~

发表于 2017-08-31 14:27:06 回复(0)
function strLength (s, bUnicode255For1) {
    if(bUnicode255For1) return s.length
    return [].reduce.call(s, function(sum, value){
        return value.charCodeAt(0) > 255 ? sum + 2 : sum + 1
    }, 0)
}

编辑于 2017-04-02 16:59:30 回复(0)
function strLength(s, bUnicode255For1) {
    if(bUnicode255For1 === true){
        return s.length;		    	
    }
    for(var i=0,m=0,len=s.length; i<len; i++){
        if(s.charCodeAt(i)>255)
            m++;
    }
    return m*2+(s.length-m);  
}
//console.log(strLength('hello world, 牛客', false));

发表于 2017-03-23 13:09:00 回复(0)
function strLength(s, bUnicode255For1) {
//如果bUnicode255For1为false,返回s的长度加正则匹配\u0256-\uffff的长度
return s.length+(bUnicode255For1?0:(s.match(/[\u0256-\uffff]/g)||[]).length)
}

编辑于 2017-03-09 10:03:17 回复(3)
function strLength(s, bUnicode255For1) {

	    if (bUnicode255For1 === true) {
	        return s.length;
	    }else {
	    	var l = 0;
	        for (var i in s){
	        	if(s.charCodeAt(i)>255){
	        		l = l+2;
	        	} else {
	        		l = l+1;
	        	}
	        }
	      	return l; 
	    }
}

发表于 2016-08-16 10:59:39 回复(0)