JS | 教练,我想做习题1

痞子三分冷 提交于 2021-01-24 20:54:49

🚀 前言

大家好呀,我是毛小悠,可以叫我二毛,在家中排行老二,是一名前端开发工程师。

本系列文章旨在通过练习来提高JavaScript的能力,一起愉快的做题吧。😀😀😀

以下每道题,二毛我都有尝试做一遍。建议限时训练,比如限定为半小时,如果半小时内想不出来,可以结合文章末尾的参考答案来思考。

可以在下方评论区留言或者加我的微信:code_maomao。期待你的到来。

求关注求点赞👍~~~😘😘😘

📖 题目1:有效括号

编写一个函数,该函数带有一个括号字符串,并确定括号的顺序是否有效。如果字符串有效,则该函数应返回true;如果无效,则返回false。

例子

"()"              =>  true
")(()))"          =>  false
"("               =>  false
"(())((()())())"  =>  true

约束条件

0 <=input.length<= 100

习题代码

function validParentheses(parens){  //TODO }

📖 题目2:简单的猪拉丁

将每个单词的第一个字母移到单词的末尾,然后在单词的末尾添加“ ay”。标点符号保持不变。

例子

pigIt('Pig latin is cool'); // igPay atinlay siay oolcay
pigIt('Hello world !');     // elloHay orldway !

习题代码

function pigIt(str){  //Code here}

答案

🍗 题目1的答案

思路:其实就是判断通过正则来判断左右括号是否匹配。

参考答案1:

function validParentheses(parens){
  var n = 0;
  for (var i = 0; i < parens.length; i++) {
    if (parens[i] == '(') n++;
    if (parens[i] == ')') n--;
    if (n < 0) return false;
  }
  
  return n == 0;
}

参考答案2:

// I had something that was smaller and looked cooler, but
// this is how you'd want to write an actual parser.
function validParentheses(string){
   var tokenizer = /[()]/g, // ignores characters in between; parentheses are
       count = 0,           // pretty useless if they're not grouping *something*
       token;
   while(token = tokenizer.exec(string), token !== null){
      if(token == "(") {
         count++;
      } else if(token == ")") {
         count--;
         if(count < 0) {
            return false;
         }
      }
   }
   return count == 0;
}

参考答案3:

function validParentheses(parens){
  var indent = 0;
  
  for (var i = 0 ; i < parens.length && indent >= 0; i++) {
    indent += (parens[i] == '(') ? 1 : -1;    
  }
  
  return (indent == 0);
}

参考答案4:

function validParentheses(parens){
  var re = /\(\)/;
  while (re.test(parens)) parens = parens.replace(re, "");
  return !parens;
}

参考答案5:

function validParentheses(parens){
  var stack = [],
    i;
  
  for (i = 0; i < parens.length; i++) {
    if (parens[i] === '(') {
      stack.push(parens[i]);
    }
    else if('(' !== stack.pop()) {
      return false;
    }
  }
  
  return stack.length === 0;
}

🍗 题目2的答案

参考答案1:

function pigIt(str){
  return str.replace(/(\w)(\w*)(\s|$)/g, "\$2\$1ay\$3")
}

参考答案2:

function pigIt(str) {
  return str.replace(/\w+/g, (w) => {
    return w.slice(1) + w[0] + 'ay';
  });
}

参考答案3:

function pigIt(str) {
  var arrayWord = str.split(' ');
  return arrayWord.map(function(word) {
    var firstLetter = word.charAt(0);
    return word.slice(1) + firstLetter + 'ay';
  }).join(' ');
}

参考答案4:

function pigIt(str){
  //Code here
  return str.replace(/\b(\w)(\w*)\b/g,"$2$1ay");
}

参考答案5:

/*
5kyu:Simple Pig Latin
Move the first letter of each word to the end of it, then add "ay" to the end of the word. Leave punctuation marks untouched.

Examples
pigIt('Pig latin is cool'); // igPay atinlay siay oolcay
pigIt('Hello world !');     // elloHay orldway
*/ 
function pigIt(str){
    let newStr="";
    const array=str.split(" ");
    for (let i of array){
        let firstLetter=""; //use to store the first letter in the word
        for(let j in i){
            if(j==='0'){
                firstLetter+=i[j]; //store first letter
            }
            else{
                newStr+=i[j];
            }
        }
        newStr+=firstLetter; //put it into end of the word
        newStr+=" "; //space
    }
    newArray=newStr.split(" ");
    newArray.pop();//delete the empty space
    let result="" //store the result
    for(let index of newArray){
        if (index.length!=1){
            result+=index;
            result+="ay";
            result+=" ";        
        }
        else if (index.length==1){
                if(index=="?" ||index=="!" ||index=="."){ //use to check if the last length is not equal symbol
                result+=index;
                }
                else{
                    result+=index;
                    result+="ay";
                    result+=" ";               
            }
            
        }
    }
    
    if(result[result.length-1] ===" "){ //delete last space
        result=result.slice(0,result.length-1);
    }
    return(result);
}

🍁后序

本系列会定期更新的,题目会由浅到深的逐步提高。

求关注求点赞 👍~~🍭🍭🍭

可以关注我的公众号:前端毛小悠。欢迎阅读

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!