
字符串移动插入算法挑战
方法一:
function translate(str) {
var way = ['a','e','i','o','u']; //把五个元音字母放到一个数组里
if (way.indexOf(str[0]) >= 0){ //当单词第一个字母能在元音字母中找到时,词尾添加‘way’(在way中被找到的话,indexOf返回的值一定>=0)
str +='way';
}
else{
for (var i = 0;i < str.length;i++){
if(way.indexOf(str[i]) >= 0){ //否则使用for循环遍历str字符串,寻找到第i个是元音字母
str = str.substr(i)+str.substr(0,i)+'ay'; //从第i个开始截取,同时把前头的都放到词尾,再加上‘ay’,然后跳出循环
break;
}
}
}
return str;
}
translate("california");
方法二:
function translate(str) { //主体函数
var num=getnum(str); //搜索结果
if ( num==-1 ){
return "没有元音";
}else if( num==0 ){
return str+"way";
}else{
return str.substring(num,str.length)+str.substring(0,num)+"ay";
}
}
function getnum(str){ //搜索str中是否有元音字母
return search(str,"a","e","i","o","u");
};
function search(){ //搜索是否含有一些字符,有就返回序号,否则返回-1
var str=[].shift.apply(arguments);
var n;
var flag=true;
for(var i=0,l=arguments.length;i<l;i++){
var nth=str.indexOf(arguments[i]);
if( nth>-1 ){
n=(n==undefined)?nth:(n<nth?n:nth);
flag=false;
}
}
return flag?-1:n;
};
translate("consonant");
方法三:
function translate(str){
var str2=str.replace(/[aeiou]/g,"|");
var index=str2.indexOf("|");
if ( index==-1 ){
return "没有元音";
}else if( index==0 ){
return str+"way";
}else{
return str.substring(index,str.length)+str.substring(0,index)+"ay";
}
}
translate("consonant");
方法四:
function translate(str) {
var vStr = 'aeiou',
ends = ['way','ay'],
i = 0,
cStr='';
while(str.charAt(i)!==undefined && vStr.indexOf(str.charAt(i))<0){
cStr += str.charAt(i);
i++;
}
if(cStr.length>0){
return str.substr(cStr.length) + cStr + ends[1];
}else{
return str + ends[0];
}
}
translate("consonant");