每日一道算法题 - LetterChanges(easy-4)

JavaScript 字符串算法实践
本文介绍了一个实用的JavaScript函数LetterChanges,该函数接收一个字符串作为输入,通过将每个字母替换为其后的一个字母来修改字符串,并将所有元音字母转换为大写形式。通过具体的示例演示了算法实现的过程。

虽然都是很简单的算法,每个都只需5分钟左右,但写起来总会遇到不同的小问题,希望大家能跟我一起每天进步一点点。
更多的小算法练习,可以查看我的文章。

规则

Using the JavaScript language, have the function LetterChanges(str) take the str parameter being passed and modify it using the following algorithm. Replace every letter in the string with the letter following it in the alphabet (ie. c becomes d, z becomes a). Then capitalize every vowel in this new string (a, e, i, o, u) and finally return this modified string.

使用JavaScript语言,使用函数LetterChanges(str)获取传递的str参数并使用以下算法对其进行修改。
将字符串中的每个字母替换为字母表后面的字母(即 c变为d,z变为a)。
然后将这个新字符串(a,e,i,o,u)中的每个元音大写,并最终返回此修改后的字符串。

测试用例

Input:"hello*3"
Output:"Ifmmp*3"


Input:"fun times!"
Output:"gvO Ujnft!"

Input:"I love Code Z!"
Output:"J mpwf DpEf A!"

my code

function LetterChanges(str) {
    var strArr = ['a', 'e', 'i', 'o', 'u']
    var newStr = ''
  
    for(var i=0;i<str.length;i++) {
      var asciiCode = str[i].charCodeAt(0)
      var tempStr = str[i]
      
      if (asciiCode <= 122 && asciiCode >= 97) {
          asciiCode = asciiCode === 122 ? 97 : asciiCode + 1
          tempStr =  String.fromCharCode(asciiCode)
      }else if(asciiCode <= 90 && asciiCode >= 65) {
          asciiCode = asciiCode === 90 ? 65 : asciiCode + 1
          tempStr =  String.fromCharCode(asciiCode)
      }
  
      if(strArr.indexOf(tempStr) !== -1) {
          tempStr = tempStr.toUpperCase()
      }
      newStr += tempStr
    }
   
    return newStr; 
}

other code

function LetterChanges(str) { 
    str = str.replace(/[a-zA-Z]/g, function(ch) {
        if (ch === 'z') return 'a';
        else if (ch === 'Z') return 'A';
        else return String.fromCharCode(ch.charCodeAt(0) + 1);
    });
   
    return str.replace(/[aeiou]/g, function(ch) {
        return ch.toUpperCase();
    });
}

思路

方法1: 使用ASCII码去判断,a-z(97,122)之间;A-Z(65,90)之间

方法2:使用正则去匹配,特殊情况如"z"和"Z",返回对应的值

知识点

  1. charCodeAt(),获取字符串的ASCII码
  2. String.fromCharCode(), 把ASCII码转换成字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值