Easy
433818FavoriteShare
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".
C++:
/*
* @Autor: SourDumplings
* @Date: 2019-09-12 23:48:51
* @Link: https://github.com/SourDumplings/
* @Email: changzheng300@foxmail.com
* @Description: https://leetcode.com/problems/reverse-vowels-of-a-string/
*/
class Solution
{
public:
string reverseVowels(string s)
{
set<char> vowels({'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'});
int l = s.length();
int i = 0, j = l - 1;
while (i < j)
{
while (i < j && vowels.find(s[i]) == vowels.end())
++i;
while (i < j && vowels.find(s[j]) == vowels.end())
--j;
if (i < j)
{
swap(s[i], s[j]);
++i;
--j;
}
}
return s;
}
};
Java:
import java.util.Set;
/*
* @Autor: SourDumplings
* @Date: 2019-09-13 15:51:47
* @Link: https://github.com/SourDumplings/
* @Email: changzheng300@foxmail.com
* @Description: https://leetcode.com/problems/reverse-vowels-of-a-string/
*/
class Solution
{
public String reverseVowels(String s)
{
int i = 0, j = s.length() - 1;
char[] ss = s.toCharArray();
Set<Character> set = new HashSet<>();
set.add('a');
set.add('e');
set.add('i');
set.add('o');
set.add('u');
set.add('A');
set.add('E');
set.add('I');
set.add('O');
set.add('U');
while (i < j)
{
while (i < j && !set.contains(ss[i]))
{
++i;
}
while (i < j && !set.contains(ss[j]))
{
--j;
}
if (i < j)
{
char temp = ss[i];
ss[i] = ss[j];
ss[j] = temp;
++i;
--j;
}
}
return String.copyValueOf(ss);
}
}