这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战。
题目描述:
345. 反转字符串中的元音字母 - 力扣(LeetCode) (leetcode-cn.com)
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现。
示例一
输入: s = "hello"
输出: "holle"
示例二
输入: s = "leetcode"
输出: "leotcede"
提示:
1 <= s.length <= 3 * 10^5s由 可打印的 ASCII 字符组成
思路分析
双指针
我们可以利用双指针一前一后遍历,当左右指针都是元音字母的时候就交换位置。
由于元音字母是固定的,所以我们要判断一个字母是不是元音字母有很多种办法,比如用map映射,或者判断在不在一个元音字母的字符集里等等。
AC代码
class Solution {
fun isVowel(c: Char): Boolean = c in "aeiouAEOIU"
fun reverseVowels(s: String): String {
val chars = s.toCharArray()
var i = 0
var j = chars.lastIndex
var char:Char
while (i < j) {
if (!isVowel(s[i])) {
i++
continue
}
if (!isVowel(s[j])) {
j--
continue
}
char = chars[i]
chars[i++] = chars[j]
chars[j--] = char
}
return String(chars)
}
}
总结
虽然高考英语考了40分,但我仅剩不多的英语知识就有元音字母是aeiou。
皮一下就很开心。
参考
反转字符串中的元音字母 - 反转字符串中的元音字母 - 力扣(LeetCode) (leetcode-cn.com)
【宫水三叶の特别篇】双指针 : 一个指针一百天 - 反转字符串中的元音字母 - 力扣(LeetCode) (leetcode-cn.com)