当前位置: 面试刷题>> 翻转字符串中的元音字母 (经典算法题500道)


题目描述

编写一个函数,该函数接受一个字符串作为参数,并返回一个新的字符串,其中原字符串中的所有元音字母(a, e, i, o, u,以及它们的大写形式A, E, I, O, U)都被翻转(即大写转小写,小写转大写),但字符串中的其他字符保持不变。

示例

输入:"Hello, World!" 输出:"hELLO, wORLD!"

PHP 示例代码

function reverseVowels($s) {
    $vowels = ['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'];
    $result = str_split($s);
    $length = strlen($s);
    
    $left = 0;
    $right = $length - 1;
    
    while ($left < $right) {
        if (in_array($result[$left], $vowels) && in_array($result[$right], $vowels)) {
            // 翻转元音字母
            $result[$left] = ctype_upper($result[$left]) ? strtolower($result[$left]) : strtoupper($result[$left]);
            $result[$right] = ctype_upper($result[$right]) ? strtolower($result[$right]) : strtoupper($result[$right]);
            
            $left++;
            $right--;
        } elseif (!in_array($result[$left], $vowels)) {
            $left++;
        } elseif (!in_array($result[$right], $vowels)) {
            $right--;
        }
    }
    
    return implode('', $result);
}

echo reverseVowels("Hello, World!"); // 输出: hELLO, wORLD!

Python 示例代码

def reverseVowels(s):
    vowels = 'aeiouAEIOU'
    s = list(s)
    left, right = 0, len(s) - 1
    
    while left < right:
        if s[left] in vowels and s[right] in vowels:
            s[left], s[right] = (s[right].lower(), s[left].upper()) if s[left].isupper() else (s[right].upper(), s[left].lower())
            left, right = left + 1, right - 1
        elif s[left] not in vowels:
            left += 1
        else:
            right -= 1
    
    return ''.join(s)

print(reverseVowels("Hello, World!"))  # 输出: hELLO, wORLD!

JavaScript 示例代码

function reverseVowels(s) {
    const vowels = 'aeiouAEIOU';
    let arr = s.split('');
    let left = 0;
    let right = arr.length - 1;
    
    while (left < right) {
        if (vowels.includes(arr[left]) && vowels.includes(arr[right])) {
            // 翻转元音字母
            [arr[left], arr[right]] = [arr[right].toLowerCase(), arr[left].toUpperCase()];
            left++;
            right--;
        } else if (!vowels.includes(arr[left])) {
            left++;
        } else {
            right--;
        }
    }
    
    return arr.join('');
}

console.log(reverseVowels("Hello, World!")); // 输出: hELLO, wORLD!

码小课网站中有更多相关内容分享给大家学习,包括但不限于算法、数据结构、编程语言进阶等,欢迎大家访问并交流学习。

推荐面试题