使用kotlin解决这个问题:345. 反转字符串中的元音字母 给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。 元音字母包括 'a'、'e'、'i'、'o'、'u',且可能以大小写两种形式出现不止一次。 示例 1: 输入:s = "hello" 输出:"holle" 示例 2: 输入:s = "leetcode" 输出:"leotcede" 提示: 1 <= s.length <= 3 * 105 s 由 可打印的 ASCII 字符组成
时间: 2024-02-13 14:06:07 浏览: 141
以下是使用 Kotlin 解决 LeetCode 345. 反转字符串中的元音字母问题的代码:
```kotlin
fun reverseVowels(s: String): String {
val vowels = "aeiouAEIOU"
var left = 0
var right = s.length - 1
val charArray = s.toCharArray()
while (left < right) {
while (left < right && !vowels.contains(charArray[left])) {
left++
}
while (left < right && !vowels.contains(charArray[right])) {
right--
}
val temp = charArray[left]
charArray[left] = charArray[right]
charArray[right] = temp
left++
right--
}
return String(charArray)
}
```
解题思路:
我们可以使用双指针的方法来解决此问题。我们定义两个指针 left 和 right,分别指向字符串的首尾位置,然后向中间移动,每次判断 left 和 right 指向的字符是否是元音字母,如果是,则交换两个字符,然后将 left 指针右移一位,right 指针左移一位,直到 left >= right 为止。
时间复杂度:O(n),其中 n 是输入字符串的长度。
空间复杂度:O(n),需要使用一个字符数组来保存结果字符串。
注意:本题还有一种使用 HashSet 来保存元音字母的解法,但是空间复杂度也是 O(n),不符合题目要求,此处不再赘述。
阅读全文