problems:
Write a function that takes a string as input and reverse only the vowels of a string.
Example 1:
Input: “hello”
Output: “holle”
Example 2:
Input: “leetcode”
Output: “leotcede”
Note:
The vowels does not include the letter “y”.
tip:
使用双指针的方式,分别从字符串的头和尾开始,当遇到元音字母时交换。注意区分大小写。
solution:
class Solution {
public:
string reverseVowels(string s) {
int n = s.size();
for(int i=0,j=n-1;i<j;)
{
if(isVowels(s[i]))
{
if(isVowels(s[j]))
{
swap(s[i],s[j]);
i++;
j--;
}
else
j--;
}
else
i++;
}
return s;
}
bool isVowels(char p)
{
if(p == 'a' || p == 'e' || p == 'i' || p == 'o' || p == 'u' || p == 'A' || p == 'E' || p == 'I' || p == 'O' || p == 'U')
return true;
else
return false;
}
};
2.优化后的代码;
class Solution {
public:
string reverseVowels(string s) {
int n = s.size();
for(int i=0,j=n-1;i<j;)
{
if( isV(s[i]) && isV(s[j]) )
{
swap(s[i],s[j]);
i++;
j--;
}
else
if(!isV(s[i])) i++;
if(!isV(s[j])) j--;
}
return s;
}
bool isV(char p)
{
if(p == 'a' || p == 'e' || p == 'i' || p == 'o' || p == 'u' || p == 'A' || p == 'E' || p == 'I' || p == 'O' || p == 'U')
return true;
else
return false;
}
};