解题思路:
- 这道题是典型的二分问题,前后各一个指针,同时移动;
- 当前后指针都指向元音字母时,交换;
- 注意交换完需要将前后指针都移动一位,指向新的字母;
C++实现如下:
class Solution {
public:
string reverseVowels(string s)
{
//二分的思路,前后双指针
int n = s.size();
int begin = 0;
int end = n - 1;
while(begin < end)
{
while(!isVowels(s[begin]))
begin++;
while(!isVowels(s[end]))
end--;
if(begin < end)
{
swap(s[begin],s[end]);
begin++;
end--;
}
}
return s;
}
bool isVowels(char c)
{
if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U')
return true;
else
return false;
}
};