题目描述
给你一个字符串 s s s ,仅反转字符串中的所有元音字母,并返回结果字符串。
元音字母包括 ′ a ′ 'a' ′a′、 ′ e ′ 'e' ′e′、 ′ i ′ 'i' ′i′、 ′ o ′ 'o' ′o′、 ′ u ′ 'u' ′u′,且可能以大小写两种形式出现不止一次。
示例 1:
输入:s = "hello"
输出:"holle"
示例 2:
输入:s = "leetcode"
输出:"leotcede"
提示:
- 1 < = s . l e n g t h < = 3 ∗ 1 0 5 1 <= s.length <= 3 * 10^{5} 1<=s.length<=3∗105
- s s s 由 可打印的 ASCII 字符组成
C++ 代码
class Solution {
public:
string reverseVowels(string s) {
// strNew表示最终结果 strSave倒着存原字符串所有的元音字母
string strNew = s;
string strSave = "";
// point是遍历的索引
int point = 0;
// 倒序遍历 得出所有的元音字母存在strSave里
for (int i = s.length() - 1; i >= 0; i--)
if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' || s[i] == 'u'
|| s[i] == 'A' || s[i] == 'E' || s[i] == 'I' || s[i] == 'O' || s[i] == 'U')
strSave.push_back(s[i]);
// 正序遍历 一遇到元音字母就更换
for (int i = 0; i < strNew.length(); i++)
{
if (strNew[i] == 'a' || strNew[i] == 'e' || strNew[i] == 'i' || strNew[i] == 'o' || strNew[i] == 'u'
|| strNew[i] == 'A' || strNew[i] == 'E' || strNew[i] == 'I' || strNew[i] == 'O' || strNew[i] == 'U')
{
strNew[i] = strSave[point];
point++;
}
}
return strNew;
}
};