345. Reverse Vowels of a String
题目文本会按所选界面语言从俄语翻译;代码保持不变。
Дана 字符串 s, переreturn только все гласные в строке и return её.
Гласные: 'a', 'e', 'i', 'o', 'u', а также их верхние регистры.
示例
Input: s = "hello"
Output: "holle"
C# 解法
匹配/原始public class Solution {
public string ReverseVowels(string s) {
HashSet<char> vowels = new HashSet<char>{'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
char[] chars = s.ToCharArray();
int left = 0, right = s.Length - 1;
while (left < right) {
if (!vowels.Contains(chars[left])) {
left++;
} else if (!vowels.Contains(chars[right])) {
right--;
} else {
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
}
return new string(chars);
}
}
C++ 解法
自动草稿,提交前请检查#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public string ReverseVowels(string s) {
HashSet<char> vowels = new HashSet<char>{'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
char[] chars = s.ToCharArray();
int left = 0, right = s.size() - 1;
while (left < right) {
if (!vowels.Contains(chars[left])) {
left++;
} else if (!vowels.Contains(chars[right])) {
right--;
} else {
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
}
return new string(chars);
}
}
Java 解法
匹配/原始public class Solution {
public String reverseVowels(String s) {
Set<Character> vowels = new HashSet<>(Arrays.asList('a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'));
char[] chars = s.toCharArray();
int left = 0, right = s.length() - 1;
while (left < right) {
if (!vowels.contains(chars[left])) {
left++;
} else if (!vowels.contains(chars[right])) {
right--;
} else {
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
}
return new String(chars);
}
}
JavaScript 解法
匹配/原始var reverseVowels = function(s) {
const vowels = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']);
let chars = s.split('');
let left = 0, right = chars.length - 1;
while (left < right) {
if (!vowels.has(chars[left])) {
left++;
} else if (!vowels.has(chars[right])) {
right--;
} else {
[chars[left], chars[right]] = [chars[right], chars[left]];
left++;
right--;
}
}
return chars.join('');
};
Python 解法
匹配/原始class Solution:
def reverseVowels(self, s: str) -> str:
vowels = set("aeiouAEIOU")
s = list(s)
left, right = 0, len(s) - 1
while left < right:
if s[left] not in vowels:
left += 1
elif s[right] not in vowels:
right -= 1
else:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
return ''.join(s)
Go 解法
匹配/原始func reverseVowels(s string) string {
vowels := "aeiouAEIOU"
chars := []rune(s)
left, right := 0, len(chars) - 1
isVowel := func(c rune) bool {
return strings.ContainsRune(vowels, c)
}
for left < right {
if !isVowel(chars[left]) {
left++
} else if !isVowel(chars[right]) {
right--
} else {
chars[left], chars[right] = chars[right], chars[left]
left++
right--
}
}
return string(chars)
}
Algorithm
1⃣Инициализация указателей и гласных:
Создайте набор гласных для быстрой проверки.
Установите два указателя: один на начало строки (left), другой на конец строки (right).
2⃣Перестановка гласных:
Пока левый указатель меньше правого, перемещайте указатели к центру, пока не найдёте гласные.
Обменивайте найденные гласные и продолжайте сдвигать указатели.
3⃣Завершение работы:
Когда указатели пересекутся, остановите процесс и return строку.
😎
Vacancies for this task
活跃职位 with overlapping task tags are 已显示.
目前还没有活跃职位。