共计 1042 个字符,预计需要花费 3 分钟才能阅读完成。
题目背景:
给一个字符串 s,只包含字母,经过处理后返回全新的字符串, 要求:
- 如果是辅音字母,其位置不变
- 如果是元音字母,需要将所有元音字母按照它们的 ASCLL 码 不降序 (升序) 的方式进行排序
我的分析
题目描述非常清晰。
给出一个案例
输入:s = "lEetcOde" 输出:"lEOtcede" 解释:'E','O' 和 'e' 是 s 中的元音字母,'l','t','c' 和 'd' 是所有的辅音。将元音字母按照 ASCII 值排序,辅音字母留在原地。
法一
按照题目逻辑,辅音字母位置不变,只排序元音字母的位置,则有以下代码
/**
* @param {string} s
* @return {string}
*/
var sortVowels = function (s) {let arr = new Array(s.length)
const str = 'aeiouAEIOU'
let tep = []
for (let i = 0; i < s.length; i++) {// 遍历 s 字符串,如果 s [i] 是辅音字母 将其放置在原本的位置 arr[i]
if (str.includes(s[i])) {tep.push(s[i])
} else {// 如果 s [i]是元音字母,先存储起来
arr[i] = s[i]
}
}
// 将 tep 使用 sort 按 ascll 升序排序
tep.sort()
// 遍历 arr 当前没有值 则逐个插入字符,let vowelIndex = 0;
for (let i = 0; i < arr.length; i++) {if (arr[i] === undefined) { // 原位置是元音
arr[i] = tep[vowelIndex++];
}
}
return arr.join('')
}
总结
这个方法涉及到一些数组和字符串的 api 的使用,我在下面总结一下
- join(”) 将数组 转换成字符串以参数给定字符进行分割,传入空字符串则不以任何字符分割
- Array.prototype.sort() 这个方法是 Array 原型方法,它接受一个回调,
- 并传递给该回调两个参数,使用这两个参数作差 a -b 若为负数 则代表 a 在 b 前 为正数则 a 应该在 b 之后
- 对字符串默认的基于 utf-16 进行升序排序
- str.includes(”) 这是字符串的方法,它会判断 str 是否包含参数
- arr.push(”) 这是数组的方法,它会将参数添加到数组尾部
对方法的优化,待续。
总结
有一阵子没有做题了,从文章发布时间也可以看出来。我对 js 中很多 api 都比较生疏了,其实是在学习阶段,编写的次数也比较少,接下来我准备 重点找同类题目,在解题的时刻意练习使用这些 api Respect !
正文完
文章二维码