为了能让博客更灵动、更有趣,特在此设立了一个广告位~

算法题-将字符串中的元音字母排序

199次阅读
没有评论

共计 1042 个字符,预计需要花费 3 分钟才能阅读完成。

题目背景:

给一个字符串 s,只包含字母,经过处理后返回全新的字符串, 要求:

  1. 如果是辅音字母,其位置不变
  2. 如果是元音字母,需要将所有元音字母按照它们的 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 的使用,我在下面总结一下

  1. join(”) 将数组 转换成字符串以参数给定字符进行分割,传入空字符串则不以任何字符分割
  2. Array.prototype.sort() 这个方法是 Array 原型方法,它接受一个回调,
    • 并传递给该回调两个参数,使用这两个参数作差 a -b 若为负数 则代表 a 在 b 前 为正数则 a 应该在 b 之后
    • 对字符串默认的基于 utf-16 进行升序排序
  3. str.includes(”) 这是字符串的方法,它会判断 str 是否包含参数
  4. arr.push(”) 这是数组的方法,它会将参数添加到数组尾部

对方法的优化,待续。

总结

有一阵子没有做题了,从文章发布时间也可以看出来。我对 js 中很多 api 都比较生疏了,其实是在学习阶段,编写的次数也比较少,接下来我准备 重点找同类题目,在解题的时刻意练习使用这些 api Respect !

正文完
文章二维码
post-qrcode
 0
xyblog
版权声明:本文于2025-09-12转载自题目来源:Leetcode 第2785题,共计1042字。
转载提示:此文章非本站原创文章,若需转载请联系原作者获得转载授权。
评论(没有评论)
这是全站底部广告位