Leetcode-345-Reverse Vowels of a String

题目要求:Write a function that takes a string as input and reverse only the vowels of a string

写一个函数具备以下功能:仅仅反转字符串中的元音字母(元音字母:a、e、i、o、u、A、E、I、O、U)

例:Given s = "hello", return "holle"   Given s = "leetcode", return "leotcede".

方法一:

解题思路:

1.生成三个数组:newArray为最终的目标字符串的数组形式,numArray里的元素为元音字母在原String中的位置,charArray为String中的元音字母

2.若不是元音字母时,newArray的元素不变,若为元音字母时,则进行倒序操作

3.最后将数组转换成字符串输出

但是此解法的问题是可以解决单个单词,若为句子,及若输入字符串含有符合如逗号、句号等则会失效,于是对函数进行改进,详见解法二

<script type="text/javascript">
/**
* @param {string} s
* @return {string}
*这种方法只能处理单个单词,若为包含符号的一句话则会失效
*/
var reverseVowels = function(s) {
    var s2String = s.toString();
    var s2Array = s2String.split("");
    var newArray = new Array();
    var numArray = new Array();
    var charArray = new Array();
    var numString = "";
    var charString = "";
    for(var i = 0; i < s2Array.length; i++){
    if (s2Array[i] == "a"||s2Array[i] =="e"||s2Array[i] =="i"||s2Array[i] =="o"||s2Array[i] =="u"||s2Array[i] =="A"||s2Array[i] =="E"||s2Array[i] =="I"||s2Array[i] =="O"||s2Array[i] =="U") {
    numString = numString + i;
    numArray = numString.split("");
    charString = charString + s2Array[i];
    charArray = charString.split("");
    }
    else{
    newArray[i] = s2Array[i];
    }
    }
    for(var i = 0; i < numArray.length; i++){
    newArray[numArray[i]] = charArray[charArray.length-1-i];
    }
    var newString = "";
    for(var i = 0; i < newArray.length; i++){
    newString = newString + newArray[i];
    }
    alert(newString);
};
reverseVowels("leetcode");
</script>

解法二:

解题思路:1.遍历String,提取出String中的元音字母,并将其反转

2.反转后依次替换原来String中元音字母位置的字符(此方法使用了String.char(i)方法,可以从字符串中得到具体字符,避免了之前需将Stirng转换成Array进行遍历)

代码如下:

<script type="text/javascript">
var reverseVowels = function(s){
var s2Str = s.toString();
//反转字符串
var reverseStr = reverseString(s2Str);
//得到反转后的元音字母
   var vowels = "";
   for(var i = 0; i < s2Str.length; i++){
    var c = reverseStr.charAt(i);
    if (c=="a"||c=="A"||c=="e"||c=="E"||c=="i"||c=="I"||c=="o"||c=="O"||c=="u"||c=="U") {
    vowels = vowels + c;
    }
   }
   //替换
   var t = 0;
   var result = "";
   for(var j = 0; j < s2Str.length; j++){
    var c = s2Str.charAt(j);
    if (c=="a"||c=="A"||c=="e"||c=="E"||c=="i"||c=="I"||c=="o"||c=="O"||c=="u"||c=="U") {
    result = result + vowels.charAt(t);
    t++;
    }else{
    result = result + c;
    }
   }
alert(result);
};
var reverseString = function(s) {
var w = s.toString();
    var stringArray = new Array();
    stringArray = w.split("");
    stringArrayNew = stringArray.reverse();
      var N = "";//必须在循环外声明
    for(var i = 0; i < stringArrayNew.length;i++){
    // var N = "";若在for循环里声明,即每次将清空N,则最后alert为"H"
        N = N + stringArrayNew[i];
    }
    return N;
};
reverseVowels("A man,a plan,a canal:panama");
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值