Confirm the Ending

Posted on 2018-09-06 23:09  豆豆2018  阅读(118)  评论(0编辑  收藏  举报
confirmEnding("Bastian", "n")应该返回 true.
confirmEnding("Connor", "n") 应该返回 false.
confirmEnding("Walking on water and developing software from a specification are easy if both are frozen", "specification")应该返回 false
confirmEnding("He has to give me a new name", "name") 应该返回 true.
confirmEnding("He has to give me a new name", "me") 应该返回 true.
confirmEnding("He has to give me a new name", "na") 应该返回 false.
confirmEnding("If you want to save our world, you must hurry. We dont know how much longer we can withstand the nothing", "mountain") 应该返回 false.

 方法一、(自己写的)

 把问题大致看成两方面。如果是一个单词,那么直接调用sbustr(-1),来验证;
如果是一句话,单词间有空格,那么我先把它转为数组并去掉空格,来获取最后一个单词,然后利用substr(),截取最后一个元素与传参(target)相同长度的字串长度,做判断
function confirmEnding(str, target) {
  // 请把你的代码写在这里
  //先转数组,拿出最后一个字符的长度
  
 if(str.indexOf(" ")==-1){
   //没有空格,单独一个单词
   var lastChar=str.substr(-1,1);
   if(lastChar==target){
     return true;
   }else{
     return false;
   }
 }else{//转为数组,找到最后一个元素
   var array=str.split(" ");
   //返回最后一个元素
  var lastEle=array[array.length-1];
   if(lastEle.substr(lastEle.indexOf(target))==target){
     return true;
   }else{
     return false;
   } 
 }
}
显然每一个判断有一相同部分,都调用了substr()方法,抽象为一条代码
 
方法二、
 
 
function confirmEnding(str, target) {
  if ( str.substr(str.length-target.length , str.length) === target) {//也可以直接调用 str.substr(str.length-target.length)==target;判断
    return true;
  }else {
    return false;
  }
}

confirmEnding("Bastian", "n");

方法三、

取巧,我们倒序然后把字符串一个一个字符的分解出来,从头开始判断与target相同长度范围内,头部元素是否完全相同

function confirmEnding(str, target) {
  // "Never give up and good luck will find you."
  // -- Falcor
  var new_str = str.split("").reverse();
  var new_target = target.split("").reverse();
  for(var i = 0; i < new_target.length; i++){
    if(new_target[i] != new_str[i]){
      return false;
    }
  }
 
  return true;
}
 
confirmEnding("He has to give me a new name", "name");

str.split("").reverse();//先把字符串分解为一个个字符,装进数组里,然后数组倒序