High一下!

笔记-网易游戏笔试题目

纸上得来终觉浅,绝知此事要躬行

  1. 给定一个字符串,请你将字符串重新编码,将连续的字符替换成“连续出现的个数+字符”。比如字符串AAAABCCDAA会被编码成4A1B2C1D2A。
    • 常规解法:遍历字符串
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      var key="AAAABCCDAA",
      result="",
      lastKey="",
      lastCount=0,
      currentKey;
      for(var i=0;i<key.length;i++){
      currentKey=key.substr(i,1);//获取当前字符
      if(lastKey==curentKey){//判断当前字符是否读取完毕
      lastCount++;//读取当前字符个数
      }else{
      if(lastKey!=""){
      result+=lastKCount+lastKey;//保存当前字符状态
      }
      lastKey=currentKey;//开始或者当前字符读取完毕重置为下个字符
      lastCount=1;//开始或者重置下个字符个数
      }
      }
      //最后一个字符类别补全
      result += lastKeyCount + lastKey;
      console.log(result);
    • 正则解法:
      第二种方法,replace方法不多做解释,正则表达式中\1表示原子组,既第一个捕获组,*号表示匹配零个或者多个\1,replace方法第二个参数是个函数,函数两个参数分别为匹配项和第一个捕获组
      1
      2
      var key="AAAABCCDAA";
      var result=key.replace(/(\w)\1*/ig,function(s,v){return s.length+v;})
坚持原创技术分享,您的支持将鼓励我继续创作!

热评文章