【LeetCode - 每日1题】将字符串中的元音字母排序
🌈 个人主页:(时光煮雨)
🔥 高质量专栏:vulnhub靶机渗透测试
👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分95+),分享更多关于网络安全、Python领域的优质内容!(希望得到您的关注~)
🌵目录🌵
- 难度 ⭐⭐⭐
- 题目回顾
- ✅解题思路
-
- 💖概述
- 💓核心思路
- ✅代码实现
- ✅代码分析
-
- 元音判断函数
- 提取并排序元音
- 重构字符串
- ✅ 复杂度分析
- ✅ 测试用例验证
-
- 示例1
- 示例2
- 边缘用例
- 🤝 期待与你共同进步
- 📚 参考文档
难度 ⭐⭐⭐
本题主要考察字符串处理、位掩码技巧和排序算法,难度中等。
题目回顾
给你一个下标从 0 开始的字符串 s ,将 s 中的元素重新 排列 得到新的字符串 t ,它满足:
- 所有辅音字母都在原来的位置上。更正式的,如果满足 0 <= i < s.length 的下标 i 处的 s[i] 是个辅音字母,那么 t[i] = s[i] 。
- 元音字母都必须以他们的 ASCII 值按 非递减 顺序排列。更正式的,对于满足 0 <= i < j
s.length 的下标 i 和 j ,如果 s[i] 和 s[j] 都是元音字母,那么 t[i] 的 ASCII 值不能大于 t[j]
的 ASCII 值。 请你返回结果字母串。 元音字母为 ‘a’ ,‘e’ ,‘i’ ,‘o’ 和 ‘u’
,它们可能是小写字母也可能是大写字母,辅音字母是除了这 5 个字母以外的所有字母。示例 1:
输入:s = “lEetcOde”
输出:“lEOtcede”
解释:‘E’ ,‘O’ 和 ‘e’ 是 s 中的元音字母,‘l’> ,‘t’ ,‘c’ 和 ‘d’ 是所有的辅音。
将元音字母按照 ASCII 值排序,辅音字母留在原地。示例 2:
输入:s = “lYmpH”
输出:“lYmpH”
解释:s 中没有元音字母(s 中都为辅音字母),所以我们返回 “lYmpH” 。提示:
- 1 <= s.length <= 10**5
- s 只包含英语字母表中的 大写 和 小写 字母。
✅解题思路
💖概述
题目要求重新排列字符串中的元音字母,使其按 ASCII 值非递减排序,同时保持辅音字母位置不变。核心步骤包括:
- 识别元音字母:包括大小写的 ‘a’, ‘e’, ‘i’, ‘o’, ‘u’。
- 提取并排序元音:收集所有元音字母并按 ASCII 值升序排序。
- 重构字符串:遍历原字符串,遇到元音时按顺序替换为排序后的元音字母。
💓核心思路
- 位掩码技巧:用二进制掩码 0x208222高效判断字符是否为元音(原理见代码分析)。
- 两步重构:先提取元音排序,再遍历原字符串替换元音位置。
✅代码实现
class Solution:def sortVowels(self, s: str) -> str:VOWEL_MASK = 0x208222