当前位置: 面试刷题>> 翻转字符串中的元音字母 (经典算法题500道)
### 题目描述
编写一个函数,该函数接受一个字符串作为参数,并返回一个新的字符串,其中原字符串中的所有元音字母(a, e, i, o, u,以及它们的大写形式A, E, I, O, U)都被翻转(即大写转小写,小写转大写),但字符串中的其他字符保持不变。
### 示例
输入:`"Hello, World!"`
输出:`"hELLO, wORLD!"`
### PHP 示例代码
```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 示例代码
```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 示例代码
```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!
```
**码小课**网站中有更多相关内容分享给大家学习,包括但不限于算法、数据结构、编程语言进阶等,欢迎大家访问并交流学习。