LeetCode.345 反转字符串中的元音字母

131 阅读1分钟

这是我参与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^5
  • s 由 可打印的 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)

双向指针 - 反转字符串中的元音字母 - 力扣(LeetCode) (leetcode-cn.com)