算法描述:
把一个英文单词的第一个辅音或辅音丛(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");
这下简单多了。