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 已显示.

所有职位
目前还没有活跃职位。