• 【华为机试真题JavaScript】字符串分割


    目录

    题目描述

    输入描述

    输出描述

    参考示例

    参考代码

    机试介绍

    写在最后


    题目描述

    给定一个非空字符串S,其被N个‘-’分隔成N+1的子串,给定正整数K,要求除第一个子串外,其余的子串每K个字符组成新的子串,并用‘-’分隔。对于新组成的每一个子串,如果它含有的小写字母比大写字母多,则将这个子串的所有大写字母转换为小写字母;反之,如果它含有的大写字母比小写字母多,则将这个子串的所有小写字母转换为大写字母;大小写字母的数量相等时,不做转换。


    输入描述

    输入为两行,第一行为参数K,第二行为字符串S。

    输出描述

    输出转换后的字符串。


    参考示例

    示例1

    输入
    3
    12abc-abCABc-4aB@


    输出
    12abc-abc-ABC-4aB-@


    说明
    子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每3个字符一组为abC、ABc、4aB、@,abC中小写字母较多,转换为abc,ABc中大写字母较多,转换为ABC,4aB中大小写字母都为1个,不做转换,@中没有字母,连起来即12abc-abc-ABC-4aB-@


    示例2

    输入
    12
    12abc-abCABc-4aB@


    输出
    12abc-abCABc4aB@


    说明
    子串为12abc、abCABc、4aB@,第一个子串保留,后面的子串每12个字符一组为abCABc4aB@,这个子串中大小写字母都为4个,不做转换,连起来即12abc-abCABc4aB@

    参考代码

    1. let strFun = function(k, s) {
    2. let numk = parseInt(k);
    3. let str = s;
    4. // 1.除第一个子串外,其他的先拼在一起
    5. const arr= str.split('-');
    6. // 第一个子串startStr
    7. const startStr = arr[0];
    8. // console.log(startStr);
    9. // 除第一个子串外,其余子字符串lastStr
    10. const arr1 = arr.slice(1, arr.length);
    11. const lastStr = arr1.join('')
    12. // console.log(lastStr);
    13. // 2.其余子字符串lastStr,按照每k个用'-'分隔开,这时候结果为resLastStr
    14. let resLastStr = "";
    15. for (let i = 0; i < lastStr.length; i++) {
    16. if(i % numk === 0 && i != 0) resLastStr += '-';
    17. resLastStr += lastStr[i];
    18. }
    19. // console.log(resLastStr);
    20. // 3.遍历resLastStr.split('-')的数组,每一项大小写计数、比较、转换
    21. let countA = 0; // 大写字母数量
    22. let counta = 0; // 小写字母数量
    23. const regA = /[A-Z]/; // 正则匹配大写字母
    24. const rega = /[a-z]/; // 正则匹配小写字母
    25. let resLastStrArr = resLastStr.split('-'); // 其余子字符串lastStr用'-'分隔组成的数组
    26. for (let j = 0; j < resLastStrArr.length; j++) {
    27. for (let i = 0; i < resLastStrArr[j].length; i++) {
    28. if (regA.test(resLastStrArr[j][i])) countA++;
    29. if (rega.test(resLastStrArr[j][i])) counta++
    30. }
    31. if (countA > counta) {
    32. resLastStrArr[j]= resLastStrArr[j].toUpperCase();
    33. // console.log(resLastStrArr[j].toUpperCase());
    34. } else if ( countA < counta) {
    35. resLastStrArr[j]= resLastStrArr[j].toLowerCase();
    36. // console.log(resLastStrArr[j].toLowerCase());
    37. }
    38. // 每计数完一个字符串,归零一次
    39. countA = 0;
    40. counta = 0;
    41. }
    42. // 4.把原来的头部字符串加上来,数组转回'-'分割的字符串
    43. resLastStrArr.unshift(startStr);
    44. const res = resLastStrArr.join('-');
    45. console.log(res);
    46. }
    47. strFun(3, '12abc-abCABc-4aB@')

    机试介绍


    三道中等难度题目,总分400分,前两道均为100分,后一道为200分,每道题的时间限制为1S(常规算法解答不出,可以用暴力方法)
    机考分数是按照题目用例的通过数量的比例算分数 (若最后一道题做不出来,可将边界情况结果等写出来 )
    机考时长2个半小时,若以冲刺机考最高分为目的,则做题时间分配前两道题40分钟,最后一题70分钟(平时练习可以按照40分钟的时限)
    机考分数线根据招聘目标院校和非目标院校有不同(不同 华为招聘部门会有差异)

    写在最后

    创作不易!

    如果觉得内容对你有帮助,麻烦给个三连关注支持一下我!

    如果有错误,请在评论区指出,我会及时更改!


    感谢各位的阅读,文章掺杂个人理解,如有错误请联系我指出~

  • 相关阅读:
    什么是软件测试?零基础入门知识要点总结篇,5分钟带你快速了解
    scrapy框架--
    NX二次开发-UFUN创建角度尺寸标注UF_DRF_create_angular_dim
    【云原生】基于Kubernetes开发的阿里云ACK之可观测监控
    Linux kernel之中断
    【Web UI自动化测试】Web UI自动化测试之数据驱动篇(全网最全)
    2.MySQL 基础知识
    【JUC系列-10】深入理解ArrayBlockingQueue的底层原理
    一键式文件共享软件Jirafeau
    纯CSS制作3D动态相册【流星雨3D旋转相册】HTML+CSS+JavaScriptHTML5七夕情人节表白网页制作
  • 原文地址:https://blog.csdn.net/forest_long/article/details/127039464