FCC--Pig Latin(儿童黑话)

  • 算法描述:
    把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 “ay”。
    如果单词以元音开始,你只需要在词尾添加 “way” 就可以了。
    题目给出的例子的答案:
    translate(“california”) 应该返回 “aliforniacay”。
    translate(“paragraphs”) 应该返回 “aragraphspay”。
    translate(“glove”) 应该返回 “oveglay”。
    translate(“algorithm”) 应该返回 “algorithmway”。
    translate(“eight”) 应该返回 “eightway”。

  • 思路解析:
    1.先找到字符串中的第一个元音字母,然后判断这个元音字母的位置。
    2.如果是第一位,在字符串最后面加上way就ok了。
    3.如果不是第一位,那就记录下这个元音在该字符串的位置,然后将该位置前面的字符全部移到字符串末尾,最后再加上ay就ok了。

function translate(str) {
  var vowel_arr = ['a','e','u','i','o'];
  var index;
  for(var i = 0; i < str.length; i++){
    if(vowel_arr.indexOf(str[i]) !== -1){
          index = i;
          break;
    }
  }
  if(index)
    return str.substring(index)+str.substring(0,index)+'ay';

  return str + 'way';
}

translate("glove");

  • 优化一下
    可以用正则匹配来查找元音在字符串的位置,exec()可以返回匹配到的第一个字符的下标。
    判断也可以用||来代替。
function translate(str) {
  var vowelIndex = /[aeuio]/.exec(str).index;

  return str.substr(vowelIndex) + (str.substr(0,vowelIndex) || "w") + "ay";
}

translate("glove");

这下简单多了。

你可能感兴趣的:(JS)